gpt4 book ai didi

c - 在 c 中将两个字节数组错误地转换为 short

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:29 25 4
gpt4 key购买 nike

我正在尝试将 2 字节数组转换为无符号短整型。

这是转换代码:

short bytesToShort(char* bytesArr)
{
short result =(short)((bytesArr[1] << 8)|bytesArr[0]);
return result;
}

我有一个存储字节的 InputFile,我通过循环读取它的字节(每次 2 个字节)并以这种方式将它存储在 char N[] arr 中:

char N[3];
N[2]='\0';

while(fread(N,1,2,inputFile)==2)

当 N[0]=0 的 (hex) 值计算正确,否则计算错误,例如:

0x62 (N[0]=0x0,N[1]=0x62) 将返回 98(短值),十六进制的 0x166 (N[0]=0x6,N[1 ]=0x16) 将返回 5638(简称值)。

最佳答案

首先,通常最好对原始二进制数据的字节使用 unsigned char 类型,因为这样可以正确表达您正在处理的内容的语义。键入 char,虽然它可以而且经常被用作“字节”的同义词,但最好保留为实际上是字符的数据。

如果您还对字节值执行算术运算,您几乎肯定需要 unsigned char 而不是 char,因为 char 的符号性code> 是实现定义的。它确实因实现而异,并且在许多常见的实现中,char已签名

话虽如此,您的主要问题似乎很简单。你说

166 in hex (N[0]=6,N[1]=16) will return 5638 (in short value).

但是 0x166 打包成一个两字节的小端数组将是 (N[0]=0x66,N[1]=0x1)。你写的会对应0x1606,确实和十进制的5638一样。

关于c - 在 c 中将两个字节数组错误地转换为 short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55306529/

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