我正逐字节地从UART读取数据。这将保存到char。 起始字节后面的字节给出了传入的后续字节数(以十六进制表示)。我需要将这个十六进制数转换为整数,以保持读取所需的字节数。
目前我只是对int进行类型转换。这是我的代码:
char ch;
int bytes_to_read;
while(1){
serial_read(UART_RX, &ch, sizeof(char));
if(/*2nd byte*/){
bytes_to_read = (int)ch;
}
}
我读到了关于strtol()的内容,但它将char数组作为输入。什么是正确的方法?
答案 0 :(得分:5)
您的问题不清楚,但假设ch
是一个表示字节数的十六进制字符,那么您可以使用一个简单的函数将十六进制转换为int,例如
int hex2int(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
if (ch >= 'A' && ch <= 'F')
return ch - 'A' + 10;
if (ch >= 'a' && ch <= 'f')
return ch - 'a' + 10;
return -1;
}
然后:
bytes_to_read = hex2int(ch);
<小时/> 但请注意,如果
ch
实际上只是一个原始值(即不是十六进制字符),那么您现有的方法应该没问题:
bytes_to_read = (int)ch;
答案 1 :(得分:1)
strtol
适用于字符串,ch
是char
,因此将this
字符转换为有效字符串
char str[2] = {0};
char chr = 'a';
str[0] = chr;
并使用strtol
与基础16
:
long num = strtol(str, NULL, 16);
printf("%ld\n", num);
答案 2 :(得分:0)
我认为简单的方法:
unsigned char x = 0xff;
int y = (int) x;
printf("Hex: %X, Decimal: %d\n",x,x);
printf("y = %d",y);
有关更多信息: https://www.includehelp.com/c/working-with-hexadecimal-values-in-c-programming-language.aspx