Hex char转换为int转换

时间:2014-11-10 08:27:57

标签: 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;
    }
}

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

3 个答案:

答案 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适用于字符串,chchar,因此将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