c函数之sprintf,sscanf函数使用(字符串与整型互转函数)

1)sprintf

    字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。

函数原型:

    int sprintf( char *buffer, const char *format, [ argument] … );

所需头文件:

    stdio.h

返回值:

    返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5。

实例:

 

#include <stdio.h>
#include <string.h>
int main() {
    char source_1[9] ;
    int  source_2 = 9999;
    sprintf(source_1, "%08x", source_2);
    printf("after sprintf source_1: %s source_2 = %x\n", source_1, source_2);
    return 0;
}


运行结果:

 

 

2)sscanf

    sscanf() - 从一个字符串中读进与指定格式相符的数据。

函数原型: 

    int sscanf( const char *, const char *, ...);
    int sscanf(const char *buffer,const char *format,[argument ]...);

所需头文件:

 

    #include<stdio.h> 或者

    #include <cstdio>

返回值:

 

    成功则返回参数数目,失败则返回-1,错误原因存于errno中。

说明:

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

    第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type :这就很多了,就是%s,%d之类。
6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
失败返回0 ,否则返回格式化的参数个数

实例:
 
#include <stdio.h>
#include <string.h>
int main() {
    char source_1[9] = "00123456" ;
    int  source_2, source_3;
    sscanf(source_1, "%d", &source_2);
    sscanf(source_1, "%x", &source_3);
    printf("after sprintf source_1: %s source_2 = %x source_3 = %x\n", source_1, source_2, source_3);
    return 0;
}

运行结果:

注意:source_2和source_3结果不一样,转换的时候输出格式不对。

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要实现STM32字符串转整数的接收程序,可以使用函数`strtol`。下面是一个实现的示例代码: ```c #include "stm32f4xx.h" #include <stdlib.h> #define BUFFER_SIZE 10 char buffer[BUFFER_SIZE]; int number; void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { static int byte_count = 0; char data = USART_ReceiveData(USART1); // 当接收到的字符是数字或者正负号时,将其保存到缓冲区中 if ((data >= '0' && data <= '9') || data == '+' || data == '-') { buffer[byte_count++] = data; // 如果接收到的字符个数达到缓冲区的大小,即表示接收到一个完整的字符串 if (byte_count >= BUFFER_SIZE) { // 将缓冲区的字符串转换为整数并保存到number变量中 number = strtol(buffer, NULL, 10); byte_count = 0; } } } } int main(void) { // 初始化USART1和GPIO等相关的操作... // 使能USART1接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 进入主循环 while (1) { // 其他的操作... } } ``` 在上述代码中,我们首先定义了一个缓冲区`buffer`和一个整数变量`number`来保存字符串转换后的整数。然后,在USART1接收中断处理程序`USART1_IRQHandler`中,我们每当接收到一个字符时,判断该字符是否为数字或者正负号。如果是,则将其存储到缓冲区中。当缓冲区中接收到的字符个数达到预设的大小时(例如10个字符),我们通过调用`strtol`函数将缓冲区的字符串转换为整数,并将结果保存到`number`变量中。 在`main`函数中,我们将使能USART1的接收中断使能位,并进入主循环执行其他操作。这样,在接收到符合条件的字符串后,中断处理程序会自动将其转换为整数并保存到`number`变量中,其他代码可以读取并使用该整数。 ### 回答2: 要实现STM32字符串整型的接收程序,可以按照以下步骤进行操作: 1. 首先,定义一个字符串变量来接收串口发送过来的字符串数据。可以使用数组来定义这个字符串变量,例如: ```c char receivedData[20]; // 假设接收的字符串长度不超过20 ``` 2. 接着,使用串口的接收函数(例如`HAL_UART_Receive()`)将接收到的字符存储到定义的字符串变量中,直到接收到结束符为止。例如: ```c HAL_UART_Receive(&huart1, (uint8_t *)receivedData, sizeof(receivedData)-1, HAL_MAX_DELAY); receivedData[sizeof(receivedData)-1] = '\0'; // 添加结束符 ``` 3. 然后,使用标准库函数`atoi()`将接收到的字符串转换整型。例如: ```c int number = atoi(receivedData); ``` 4. 最后,可以将整型数据发送回给发送端或进行其他处理。例如: ```c sprintf(receivedData, "%d", number); // 将整型数据转换字符串 HAL_UART_Transmit(&huart1, (uint8_t *)receivedData, strlen(receivedData), HAL_MAX_DELAY); // 发送整型数据给发送端 ``` 在以上步骤中,需要根据实际情况调整字符串的长度和串口的配置。另外,需要确保发送端发送的字符串能够被正确解析为整型数据,在发送时可以使用`sprintf()`函数整型数据转换字符串。 ### 回答3: 要将字符串转换整型,我们可以使用C语言的标准库函数atoi()或者sscanf()。 首先,我们需要将接收到的字符串存储在一个字符数组中。我们可以使用UART串口接收数据,并将数据存储在一个缓冲区中。 接收程序的伪代码如下: ``` #include <stdio.h> #include <string.h> int main() { char buffer[20]; int number; printf("请输入一个整数字符串:"); fgets(buffer, sizeof(buffer), stdin); // 从用户输入获取字符串 buffer[strlen(buffer) - 1] = '\0'; // 去除末尾的换行符 number = atoi(buffer); // 使用atoi函数字符串转换整型 printf("转换后的整数为:%d\n", number); return 0; } ``` 另一种方法是使用sscanf()函数,可以根据指定的格式从字符串中提取整型数据。 ``` #include <stdio.h> #include <string.h> int main() { char buffer[20]; int number; printf("请输入一个整数字符串:"); fgets(buffer, sizeof(buffer), stdin); buffer[strlen(buffer) - 1] = '\0'; sscanf(buffer, "%d", &number); // 使用sscanf函数字符串转换整型 printf("转换后的整数为:%d\n", number); return 0; } ``` 以上是在C语言中进行字符串整型转换的两种常用方法。在使用这些方法时需要注意,字符串必须符合整型的格式要求,否则可能会得到错误的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔乙己大叔

你看我有机会吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值