表示R和MATLAB之间的十六进制数的差异

时间:2014-04-04 19:16:23

标签: r matlab octave endianness

在同一台机器上,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的输出是错误的还是我的误解?

2 个答案:

答案 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。很少有人知道这是一个实际的词。现在你就是其中之一。