Hex char转换为int转换

Zax*_*ter 1 c linux serial-port

我正逐字节地从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我读到了关于strtol()的内容,但它将char数组作为输入.这样做的正确方法是什么?

Pau*_*l R 6

您的问题不清楚,但假设这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;
}
Run Code Online (Sandbox Code Playgroud)

然后:

bytes_to_read = hex2int(ch);
Run Code Online (Sandbox Code Playgroud)


但请注意,如果ch它实际上只是一个原始值(即不是十六进制字符),那么您现有的方法应该没问题:

bytes_to_read = (int)ch;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`atoi()`? (2认同)
  • @codemonkey:两个主要原因:(i)`atoi`使用字符串,而不是单独的`char`s和(ii)`atoi`使用十进制(基数10)数字,而不是十六进制(基数16). (2认同)