我知道如何扭转字节顺序(convert big endian to little endian in C [without using provided func]) - 在这种情况下,我想使用__builtin_bswap64复制字节反转uint64_t中以uint8_t数组
我也知道如何将一个64位UINT复制到一个字符数组 - 理想的记忆体。 (How do I convert a 64bit integer to a char array and back?)
我的问题是这两种的结合。在问题的根源,我试图找到这段代码更快的替代方案:
carr[33] = ((some64bitvalue >> 56) & 0xFF) ;
carr[34] = ((some64bitvalue >> 48) & 0xFF) ;
carr[35] = ((some64bitvalue >> 40) & 0xFF) ;
carr[36] = ((some64bitvalue >> 32) & 0xFF) ;
carr[37] = ((some64bitvalue >> 24) & 0xFF) ;
carr[38] = ((some64bitvalue >> 16) & 0xFF) ;
carr[39] = ((some64bitvalue >> 8) & 0xFF) ;
carr[40] = (some64bitvalue & 0XFF);
由于存储器复制不采取__builtin_bswap64源论证的结果(?或者它),我想这:
*(uint64_t *)upub+33 = __builtin_bswap64(some64bitvalue);
,但我最终的 错误:左值要求作为分配的左操作数
是否有快速替代原来的代码我想在所有的更换?
什么的'upub'类型?您可能违反了严格的别名规则。 – user694733
为什么你认为它太慢?你有没有看看汇编代码?你有个人资料吗?首先集中编写便携和可读代码(例如,通过将其封装在一个函数中),只有在遇到速度问题时才进行优化。 – Olaf
我确实有速度问题,我知道“过早优化问题”。这里不适用。我的假设完全基于直觉,但基于'*((uint64_t *)upub + 33)= __builtin_bswap64(大约64bitval);'我的直觉证明是正确的。 – Perlator