C 将8字节字符数组转换为长字符

C 将8字节字符数组转换为长字符,c,arrays,types,shift,C,Arrays,Types,Shift,如何将8字节字符数组转换为long-since以下代码效率更高: unsigned char[word_size] = ...; int64_t num = 0; for ( int i = 0 ; i < sizeof(a) ; i++ ) num = (num << 8) | a[i]; 注意:字符是有符号的还是无符号的取决于实现,因此请将其固定为无符号,否则逻辑or将不起作用。更好地使用uint8_t;它被定义为8位,而char不是 注意:常量应使用所有大写字母

如何将8字节字符数组转换为long-since以下代码效率更高:

unsigned char[word_size] = ...;
int64_t num = 0;
for ( int i = 0 ; i < sizeof(a) ; i++ )
    num = (num << 8) | a[i];
注意:字符是有符号的还是无符号的取决于实现,因此请将其固定为无符号,否则逻辑or将不起作用。更好地使用uint8_t;它被定义为8位,而char不是


注意:常量应使用所有大写字母:WORD\u SIZE而不是WORD\u SIZE。这是一个普遍接受的标准,也是C中唯一一个关于标识符的情况。

以下代码更有效:

unsigned char[word_size] = ...;
int64_t num = 0;
for ( int i = 0 ; i < sizeof(a) ; i++ )
    num = (num << 8) | a[i];
注意:字符是有符号的还是无符号的取决于实现,因此请将其固定为无符号,否则逻辑or将不起作用。更好地使用uint8_t;它被定义为8位,而char不是


注意:常量应使用所有大写字母:WORD\u SIZE而不是WORD\u SIZE。这是一个普遍接受的标准,C语言中标识符的唯一情况是长不一定是64位。如果要确保,请使用stdint.h中的int64_t。这就是提议的方式。此外,请确保数组具有正确的字节顺序。long不一定是64位。如果要确保,请使用stdint.h中的int64_t。这就是提议的方式。此外,还要确保数组具有正确的字节顺序。为此,我试图将一个8字节的字符数组转换为长字符数组,这是我能找到的唯一方法。@DaveCole:我很高兴这有帮助。只要记住在移动有符号值时要小心。我通常强烈建议只在移位时使用无符号类型。还要注意,long-long不需要有64位,而byte/char see-text也不需要有8位。使用正确的类型可以使代码更加自我记录。即使这不是生产代码,你可能会在几年内重视它。为此,我试图将一个8字节的字符数组转换成一个长字符数组,这是我能找到的实现它的唯一方法。@DaveCole:我很高兴它有帮助。只要记住在移动有符号值时要小心。我通常强烈建议只在移位时使用无符号类型。还要注意,long-long不需要有64位,而byte/char see-text也不需要有8位。使用正确的类型可以使代码更加自我记录。即使这不是生产代码,您可能会在几年内重视它。
for ( int i = sizeof(a) ; --i >= 0 ; )