gpt4 book ai didi

将 8 字节 char 数组转换为 long

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:00 24 4
gpt4 key购买 nike

<< 以来,我们如何将 8 字节 char 数组转换为 long不适用于 long 类型?

#define word_size 8

long num = 0;
char a[word_size] = "\x88\x99\xaa\x0bb\xcc\xdd\xee\xff";

for (i=0; i < word_size;i++) {
a[(word_size-1) - i] |= (num << (8*(word_size - i - 1))) & 0xFF;
}

printf("%lx\n", num);

最佳答案

下面的代码效率更高:

unsigned char[word_size] = ...;
int64_t num = 0;
for ( int i = 0 ; i < sizeof(a) ; i++ )
num = (num << 8) | a[i];

这假定数组中字节的大端顺序(最高位字节优先)。对于小端(如您所用),只需自上而下处理它:

for ( int i = sizeof(a) ; --i >= 0 ; )

注意:char 是有符号的还是无符号的取决于具体实现,所以一定要确定它是无符号的,否则逻辑或将不起作用。最好使用 uint8_t;定义为 8 位,而 char 不是

注意:您应该对常量使用全大写:WORD_SIZE 而不是 word_size。这是一个普遍接受的标准(关于 C 中标识符的唯一情况)。

关于将 8 字节 char 数组转换为 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720546/

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