如何将十六进制转换为ASCII字符串

How to convert HEX to ASCII String?

本文关键字:ASCII 字符串 转换 十六进制      更新时间:2023-10-16

我有一个十六进制字符串,并希望它在C/c++转换为ASCII字符串。我怎么才能做到这一点?

未使用的位置用#F填充。示例:数字字符串1234567需要写入16个预留位置(8字节)

  Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7

HEX 1 2 3 4 5 6 7 F F F F F F F F F F F F F

输入:0x12 0x34 0x56 0x7f 0xff 0xff 0xff 0xff

输出:1234567

您在示例中显示的编码似乎是BCD。也就是说,一个字节可以存储2位数字。每个数字由4位表示。如果4位大于1001二进制(9十进制),那么您要将其解释为无效数字,我猜FF十六进制将被解释为空白。您可以使用位操作符访问字节中的每个小块:

//Let's say a byte of your input is stored as 'a'
    char a = 0x15; //This is 15 BCD
    //separate lower and upper nibble
    char lower_nibble=a&0x0F;
    char upper_nibble=(a&0xF0)>>4;
    //convert to ASCII
    if(lower_nibble > 9) lower_nibble =' '; //space
    else lower_nibble = '0' + lower_nibble; //convert to ASCII
    if(upper_nibble > 9) upper_nibble =' '; //space
    else upper_nibble = '0' + upper_nibble; //convert to ASCII
    std::cout<<"n A is: "<<upper_nibble<<" "<<lower_nibble;