0300 0000 0300 0000 0000 803f 0000 0000
0000 0000 0000 0000 0000 803f 0000 0000
0000 0000 0000 0000 0000 803f
下面是3x2矩阵,具有任意数字,其值我不确定: br />
0300 0000 0200 0000 0000 803f 0000 4040
0000 a040 0000 0040 0000 8040 0000 c040
基本上,是否存在一种编码方式,其中
0000 803f
可以转换为1
的值,而0000 0000
可以转换为每个矩阵值的0
?#1 楼
您已经正确地将前四个字节标识为标题或矩阵形状。如果要删除这些形状字节并重新对齐其余的十六进制字符串,则标识矩阵将变得非常清晰:
0000 803f 0000 0000 0000 0000
0000 0000 0000 803f 0000 0000
0000 0000 0000 0000 0000 803f
在这里我们可以很容易地看到文本与单位矩阵的形状对齐,一个单元格为四个字节,而
0000 803f
的值表示1
。这恰好是
1.0
的IEEE 754编码。这是您可以通过一些经验认识到的东西,或者让python向您展示了:#2 楼
哦,我才知道。我可以将标头后的以下4个字节值分别解释为little-endian格式的32位带符号浮点值。0000 803f
等同于1.0f
。我使用
DataView
在node.js中确定了这一点:const u = new Uint8Array(4);
const d = new DataView(u.buffer);
u[0] = 0x00;
u[1] = 0x00;
u[2] = 0x80;
u[3] = 0x3f;
// interpret 4 bytes at offset of 0 bytes as little-endian 32-bit float
// DataView.prototype.getFloat32(byteOffset[, littleEndian])
console.log(d.getFloat32(0, true));
// outputs 1
评论
是。我只是在回答:(
– NirIzr
16-11-12在19:53
@NirIzr对此感到抱歉。这些文件是用于课堂作业的,我的教授没有费心解释文件的格式。您可能会回答完,我会为您打扰。
–帕特里克·罗伯茨(Patrick Roberts)
16年11月12日19:54
是的,我还是要回答,只是丢了010editor彩色图像:P
– NirIzr
16年11月12日在20:01
评论
请注意,此代码隐式取决于主机系统的字节序和大小。要始终解码低位字节的binary32浮点数,请使用格式字符串'
–类风湿
16年11月12日在20:50
@Rhymoid +1但是我假设写文件的代码也执行本机操作,所以@f是您想要的。
– NirIzr
16年11月12日在21:27