在同一台机器上,R和MATLAB产生双倍的不同十六进制表示,例如: R:
x <- 2.28
writeBin(x,raw(0))
给出
3d 0a d7 a3 70 3d 02 40
MATLAB:
x = 2.28;
num2hex(x)
给出
40023d70a3d70a3d
Octave产生与MATLAB相同的结果。为什么MATLAB的输出反转?
更新:所以它确实是字节序。它仍然是为什么R弄错了。使用chappjc下面的答案中的一个例子,我在小端CPU上得到以下输出:
writeBin(1024, raw(), endian='little')
00 00 00 00 00 00 90 40
和
writeBin(1024, raw(), endian='big')
40 90 00 00 00 00 00 00
这与我的预期完全相反。 R的输出是错误的还是我的误解?
答案 0 :(得分:3)
英特尔系统上的MATLAB将浮点值存储为小端。使用computer
检查:
>> [computerType, ~, endian] = computer
computerType =
PCWIN64
endian =
L
您可以使用swapbytes
在小尾数之间进行转换:
>> num2hex(1024)
ans =
4090000000000000
>> num2hex(swapbytes(1024))
ans =
0000000000009040
在R中,在endian="big"
中指定endian="little"
(或writeBin
)以匹配您的MATLAB:
writeBin(x,raw(0),endian="big")
答案 1 :(得分:2)
这是endianness。很少有人知道这是一个实际的词。现在你就是其中之一。