转换长 - >十六进制,然后将十六进制分配给C中的字符

时间:2013-11-19 05:55:51

标签: c char hex long-integer

我正在使用一个计算16位CRC校验和的函数。

该函数产生一个包含校验和(基数为10的数字格式)的LONG。当然,这可以打印到控制台上,其十六进制等效如下:

printf("Checksum:  0x%x\n", crctablefast((unsigned char *)string, datalength));

对于要检查的给定20字节字符数组,它将以十六进制格式生成校验和23277:

Checksum:  5AED

我需要将校验和作为char存储在char数组的第21和第22位,如下所示:

Char [20] = 0x5A
Char [21] = 0xED

问题是像scanf和sscanf这样的函数,我能做的最好是按字面分配字符,如下所示:

Char [20] = "0x5A"
Char [21] = "0xED"

......这不好。

如何一次取两个字符,并使用它们为char指定十六进制值?或者一般来说有更简单的方法吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

它可以像这样保存到字符或字符数组中:

Char [20] =(char)0x5A; Char [21] =(char)0xED;

通过这种方式,它将保存十六进制数的整数值的等效字符,您可以通过强制转换将其转换回来并使用它。

嗯,背景中的任何内容都不是十六进制,机器中的所有内容都是二进制的,而人类则是十进制的。因此,hex是一个man机器接口,仅供表示。

答案 1 :(得分:0)

使用位掩码:

ch[20] = (crc >> 8) & 0xff;
ch[21] = crc & 0xff;