如何将HEX转换为ASCII字符串?

时间:2013-03-21 11:38:29

标签: c++ c

我有一个十六进制字符串,希望它在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

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

输出: 1234567

1 个答案:

答案 0 :(得分: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;