j. *_*doe 5 c c++ type-conversion
假设我有8个unsigned char,我想将其转换成long long long。
例如,如果所有char都等于0xFF,则无符号long long等于0xFFFFFFFFFFFFFFFFFF。
用C或C ++最有效的方法是什么?
例如:
unsigned char buffer[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
unsigned long long target;
memcpy(&target, buffer, sizeof target);
Run Code Online (Sandbox Code Playgroud)
请注意,如果不是所有元素都buffer具有相同的值,则结果将取决于字节顺序(小尾数与大尾数)。
这也假定unsigned long long正好是8个字节。通常这是正确的,但不能保证。(也不能保证一个字节正好是8位;它可以更多。unsigned char按定义,An 是1个字节。)
您可以直接分配位,而不是 memcpy
unsigned char buffer[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
unsigned long long l = 0;
for (int i = 0; i < 8; ++i) {
l = l | ((unsigned long long)buffer[i] << (8 * i));
}
Run Code Online (Sandbox Code Playgroud)
我相信这不受字节顺序的影响。
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |