将十六进制字符串转换为十六进制字节而不在没有库的 c 中使用

use*_*124 0 c embedded

我有一个字符串,{F0A9B8BDE38182}
我需要将其转换为十六进制字节

0xF0 0xA9 0xB8 0xBD 0xE3 0x81 0x82
Run Code Online (Sandbox Code Playgroud)

我可以用下面的代码得到答案

for (i = 0; i < (str_len /2); i++)
{
    sscanf(hexstring + 2*i, "%02x", &bytearray[i]);
    printf("bytearray %d: %02x\n", i, bytearray[i]);
}
Run Code Online (Sandbox Code Playgroud)

但我不需要使用 sscanf

kir*_*dar 5

您需要将个人转换ASCII为相应的HEX数字,然后使用|以形成完整的byte.

例子:

   for (i = 0; i < strlen(s)/2; i++)
    {
       bytearray[i] = AsciiToHex(s[2*i])<<4 | AsciiToHex(s[2*i+1]);
       printf("bytearray %d: %02X\n", i, bytearray[i]);
    }

    uint8_t AsciiToHex(char c){

       if (c >= '0' && c<='9') return c - '0';
       else if (c >= 'A' && c <= 'F') return 10 + c - 'A';
       else return 0;
    }
Run Code Online (Sandbox Code Playgroud)

  • @ user10331124,这就是你想要的。`AsciiToHex` 只是命名错误。它将 ASCII 字符 *from* 十六进制转换为数字 (0..15)。然后调用者将这些数字对组合成更大的数字(0..255 或 -128..127,具体取决于系统对 `char` 的定义),即您请求的字节。 (2认同)