在C#中
var buffer = new byte[] {71, 20, 0, 0, 9, 0, 0, 0};
var g = (ulong) ((uint) (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) |
(long) (buffer[4] | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24) << 32);
Run Code Online (Sandbox Code Playgroud)
在C++中
#define byte unsigned char
#define uint unsigned int
#define ulong unsigned long long
byte buffer[8] = {71, 20, 0, 0, 9, 0, 0, 0};
ulong g = (ulong) ((uint) (buffer[0] | buffer[1] << 8 | buffer[2] << 16 | buffer[3] << 24) |
(long) (buffer[4] | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24) << 32);
Run Code Online (Sandbox Code Playgroud)
C#输出38654710855,C++输出5199.
为什么?几个小时以来我一直在摸不着头脑......
编辑:C#具有正确的输出.
感谢大家的帮助:)杰克艾德利的答案是第一个,所以我会将其标记为已接受的答案.其他答案也是正确的,但我不能接受多个答案:
C++没有工作,因为你long在大多数当前的C++实现中转换为通常为32位但其确切长度留给实现者.你想要的long long.
另外,请阅读下面的Bikeshedder更完整的答案.他是非常正确的,固定大小的typedef是一种更可靠的方法.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |