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