转换长->;十六进制,然后将该十六进制赋值给C中的一个字符

转换长->;十六进制,然后将该十六进制赋值给C中的一个字符,c,char,hex,long-integer,C,Char,Hex,Long Integer,我正在使用一个计算16位CRC校验和的函数 该函数生成一个包含校验和的长字符串(以10为基数的数字格式)。当然,这可以用十六进制打印到控制台,如下所示: printf("Checksum: 0x%x\n", crctablefast((unsigned char *)string, datalength)); Char [20] = "0x5A" Char [21] = "0xED" 对于正在检查的给定20字节字符数组,它将生成十六进制格式的校验和23277: Checksum: 5AE

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

该函数生成一个包含校验和的长字符串(以10为基数的数字格式)。当然,这可以用十六进制打印到控制台,如下所示:

printf("Checksum:  0x%x\n", crctablefast((unsigned char *)string, datalength));
Char [20] = "0x5A"
Char [21] = "0xED"
对于正在检查的给定20字节字符数组,它将生成十六进制格式的校验和23277:

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

Char [20] = 0x5A
Char [21] = 0xED
问题是,像scanf和sscanf这样的函数,我能做的最好的事情就是按字面意义分配字符,如下所示:

printf("Checksum:  0x%x\n", crctablefast((unsigned char *)string, datalength));
Char [20] = "0x5A"
Char [21] = "0xED"
…这不好

如何一次提取两个字符,并使用它们为字符指定十六进制值?还是有一种更简单的方法


提前谢谢你

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

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

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

嗯,背景中没有十六进制的东西,机器中的所有东西都是二进制的,而人类用十进制做事情。所以,hex是一个人机界面,只是一种表示

使用位掩码:

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

我知道,当我看到“23277”时,背景中发生的一切都是十六进制/二进制的,所以我可能在这方面通过望远镜的错误端看。我想一定有一些简单得可笑的事情可以做到这一点。你是在寻找转移和掩蔽吗<代码>ch[20]=crc&0xff;ch[21]=(crc>>8)&0xff字符[20]只能包含一个字符。。注“0x5A”为4个字符长,字符[20]=“0x5A”;甚至没有work@H2CO3我认为OP需要big-endian
ch[20]=(crc>>8)&0xff;ch[21]=crc&0xff
@H2CO3你能把你的推荐贴出来作为解决方案吗,我会给它打分,并把它标为有效的解决方案。此外,还使用了little endian。谢谢你的提醒,谢谢。这很有效。我知道这必须是非常简单的事情。。