作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有:
typedef unsigned long long uint64;
unsigned char data[BUF_SIZE];
uint64 MyPacket::GetCRC()
{
return (uint64)(data[45] | data[46] << 8 |
data[47] << 16 | data[48] << 24 |
(uint64)data[49] << 32| (uint64)data[50] << 40 |
(uint64)data[51] << 48| (uint64)data[52] << 56);
}
只是想知道,是否有更清洁的方法。我尝试了一个 uint64 变量的 memcpy但这给了我错误的值(value)。我想我需要反过来。数据采用小端格式。
最佳答案
使用 shift-or sequence 的一大优势在于,无论您的主机是大端还是小端,它都能正常工作。
当然,您总是会调整表达式。就个人而言,我尝试加入“对”,即一次两个字节,然后是两个短字节,最后是两个长字节,因为这将有助于编译器生成更好的代码。
关于c++ - 如何简单地从小端格式的缓冲区中重建数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5230338/
我是一名优秀的程序员,十分优秀!