0

我有一个 HEX 字符串,并希望将其转换为 C/C++ 中的 ASCII 字符串。我怎样才能做到这一点?

未使用的位置用#F 填充。示例:应将数字字符串 1234567 写入具有 16 个保留位置(8 个字节)的字段中

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

十六进制 1 2 3 4 5 6 7 FFFFFFFFF

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

输出:1234567

4

1 回答 1

1

您在示例中显示的编码似乎是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;
于 2013-03-21T12:22:56.563 回答