[其他ST产品] 将 uint8_t 和 Char 数组转换为字符串和整数

[复制链接]
154|11
咚了个咚 发表于 2025-8-31 11:21 | 显示全部楼层 |阅读模式
如何将 uint8_t 和 Char 数组转换为字符串和整数?

如何在 STM32CubeIDE 中使用函数 (.substring(0,7)) ?

yiy 发表于 2025-8-31 14:10 | 显示全部楼层
哪个函数是C++的吧。
yiy 发表于 2025-8-31 14:11 | 显示全部楼层
如果是C++Jiu很容易实现。你用的是C还是C++
yiy 发表于 2025-8-31 14:12 | 显示全部楼层
uint8_t 转换为字符串

  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <inttypes.h>

  4. int main() {
  5.     uint8_t num = 123;
  6.     char str[4]; // 足够存储 uint8_t 的最大值 (255) + 空字符
  7.    
  8.     sprintf(str, "%" PRIu8, num);
  9.     printf("字符串: %s\n", str);
  10.    
  11.     return 0;
  12. }


yiy 发表于 2025-8-31 14:12 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <inttypes.h>

  4. int main() {
  5.     uint8_t num = 200;
  6.     char str[4];
  7.    
  8.     snprintf(str, sizeof(str), "%" PRIu8, num);
  9.     printf("字符串: %s\n", str);
  10.    
  11.     return 0;
  12. }
yiy 发表于 2025-8-31 14:12 | 显示全部楼层
char 数组转换为整数
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main() {
  4.     char str[] = "123";
  5.     int num = atoi(str);
  6.    
  7.     printf("整数: %d\n", num);
  8.    
  9.     return 0;
  10. }
yiy 发表于 2025-8-31 14:13 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>

  4. int main() {
  5.     char str[] = "255";
  6.     char *endptr;
  7.     long num;
  8.    
  9.     errno = 0;
  10.     num = strtol(str, &endptr, 10);
  11.    
  12.     if (errno != 0 || *endptr != '\0') {
  13.         printf("转换失败\n");
  14.         return 1;
  15.     }
  16.    
  17.     printf("整数: %ld\n", num);
  18.    
  19.     return 0;
  20. }
yiy 发表于 2025-8-31 14:13 | 显示全部楼层
  1. #include <stdio.h>

  2. int main() {
  3.     char str[] = "123";
  4.     int num;
  5.    
  6.     if (sscanf(str, "%d", &num) == 1) {
  7.         printf("整数: %d\n", num);
  8.     } else {
  9.         printf("转换失败\n");
  10.     }
  11.    
  12.     return 0;
  13. }
yiy 发表于 2025-8-31 14:13 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <inttypes.h>
  5. #include <string.h>

  6. int main() {
  7.     // uint8_t 转字符串
  8.     uint8_t num = 150;
  9.     char num_str[4];
  10.     snprintf(num_str, sizeof(num_str), "%" PRIu8, num);
  11.     printf("uint8_t 转字符串: %s\n", num_str);
  12.    
  13.     // 字符串转整数
  14.     char int_str[] = "42";
  15.     int converted_int = atoi(int_str);
  16.     printf("字符串转整数: %d\n", converted_int);
  17.    
  18.     // char 数组处理
  19.     char char_arr[] = "Hello";
  20.     printf("char 数组作为字符串: %s\n", char_arr);
  21.    
  22.     // 将 char 数组视为 uint8_t 数组
  23.     uint8_t uint8_arr[5];
  24.     for (int i = 0; i < strlen(char_arr); i++) {
  25.         uint8_arr[i] = (uint8_t)char_arr[i];
  26.         printf("字符 '%c' 的 ASCII 值: %" PRIu8 "\n", char_arr[i], uint8_arr[i]);
  27.     }
  28.    
  29.     return 0;
  30. }
yiy 发表于 2025-8-31 14:13 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <limits.h>

  6. // 安全地将字符串转换为 uint8_t
  7. int safe_str_to_uint8(const char *str, uint8_t *result) {
  8.     char *endptr;
  9.     long val;
  10.    
  11.     errno = 0;
  12.     val = strtol(str, &endptr, 10);
  13.    
  14.     // 检查转换错误
  15.     if (errno != 0 || *endptr != '\0') {
  16.         return -1;
  17.     }
  18.    
  19.     // 检查范围
  20.     if (val < 0 || val > UINT8_MAX) {
  21.         return -1;
  22.     }
  23.    
  24.     *result = (uint8_t)val;
  25.     return 0;
  26. }

  27. int main() {
  28.     char input[] = "200";
  29.     uint8_t result;
  30.    
  31.     if (safe_str_to_uint8(input, &result) == 0) {
  32.         printf("转换成功: %" PRIu8 "\n", result);
  33.     } else {
  34.         printf("转换失败\n");
  35.     }
  36.    
  37.     return 0;
  38. }
星辰大海不退缩 发表于 2025-8-31 22:53 | 显示全部楼层
应该有自带的标准库文件
AdaMaYun 发表于 2025-8-31 23:43 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部