【发布时间】:2021-03-04 02:14:24
【问题描述】:
我的问题如下。
我正在从传感器读取一段 ascii 数据,假设它是“400”。它存储在一个字符数组中。在十六进制(ascii)中,这将是 { 0x34, 0x30, 0x30 }。
我试图从那组字符中得到一个十进制整数,代表十六进制 0x400,即 1024。这个 ascii 字符数组中的所有其他数值都以十进制表示,所以我已经一直在用这个:
int num_from_ascii(char reading[], int start, int length){
printf("++++++++num_from_ascii+++++++++\n");
char radar_block[length];
for(int i = 0; i < length; i++){
radar_block[i] = reading[start + i];
printf("%02x ", reading[start + i]);
}
printf("\n");
return atoi(radar_block);
}
这显然只是给了我 400,但我需要一个十六进制值的十进制整数。有什么建议吗?
【问题讨论】:
-
我的问题是您是否应该从字面上阅读单个值。
-
我从中提取的样本肯定应该是 1024,所以我对所提供的值以及如果有帮助的话如何读取它们很有信心。
-
strtoul将为您处理大部分工作 -
如果不先转换为数字,您将无法真正做到这一点。将
400读取为字符串,将其转换为int并将int打印为十进制。 -
该部分已经通过帖子中的该功能完成。那将返回一个代表 400 的整数,但整数不是 400,它应该是 0x400 或 1024(我想要的整数)
标签: c++ c serial-port hex ascii