我在64位英特尔处理器上工作...我正在学习大端和小端,我理解的是这些是一个字内的字节排序,这样在64位数据中,msb将具有最大的地址endian形式和小端形式的最高地址......现在我有一个问题:
我写了this code
确定我的处理器是小端还是大端...
我输入了
0102030405060708 (this is in hex)
并希望得到08
和07
以及06
和......以及01
作为回答
但取而代之的是0
和25
以及50
和-125
以及-13
和501
以及-41
和{{ 1}}。
当我编写相同的代码时,'s'为2字节(短),66
的输出为0102
和2
(这与小端有关)......所以这里出了什么问题?
答案 0 :(得分:3)
您将输入值存储为double
,将值存储为floating point值。尝试使用long long
代替,这是一个64位整数,并且应该按预期存储该值。
答案 1 :(得分:2)
将十六进制数转换为(double)
不太可能达到预期效果;它是一个由基数2尾数和指数组成的浮点值。您可能会发现(long)
或(long long)
更接近您的预期。