gpt4 book ai didi

c - 使用 XOR 创建校验字节

转载 作者:太空狗 更新时间:2023-10-29 15:32:13 25 4
gpt4 key购买 nike

我的任务是制定一些关于从收银机和秤之间的字节序列计算出校验字节的少量指令,然后用 C 语言实现它。

手册中的说明(获取校验字节):

ID XOR B1 XOR B2 XOR B3 XOR B4 XOR B5

其他类似的协议(protocol)提到它可能是异或每个字节中的最高有效位——(我不知道该怎么做,或者即使它需要)

幸运的是,我有体重秤和一台计算机来准确检查发送的是什么,ID = asciii 和 B1 到 B5 是重量,在这个例子中,当秤上的重量显示为 00748 时; ascii 返回的序列是i00748 然后发送校验字节:45 decimal.

不幸的是,我在下面尝试的一些代码返回十进制的 82。

    char out = 0;
char in[6] = "i00748";
int i;

for(i=0; i<6; i++)
out = out ^ in[i];

printf("%d",out);

感谢任何帮助。

最佳答案

该协议(protocol)使用 7 位 ASCII,每个位都采用奇校验。也就是说,每个字节(包括校验字节)的 MSB 为 0。如果校验字节中的每个位在该位位置有奇数个 1,则为 0,否则为 1。

为了说明,这里是二进制显示的消息

01101001   i   ID
00110000 0 B1
00110000 0 B2
00110111 7 B3
00110100 4 B4
00111000 8 B5
--------
00101101 - check byte

请注意,在每一列中,如果消息字节包含偶数个 1,则校验字节也为 1,但如果消息字节包含奇数个 1,则校验字节为 0。 MSB 异常(exception),所有消息字节和校验字节都为 0。

因此,修复代码所需要做的就是从

开始
out = 0x7f;

关于c - 使用 XOR 创建校验字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32577929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com