我为我们的项目制作自定义二进制导出器,我在使用python时遇到了奇怪的情况。
简短的代码是这样的,这段代码是二进制的当前数据。
...
nBSVtx = struct.pack("i",bob.number_of_blending_vertices)
nVtx = struct.pack("i",bob.number_of_vertices)
nFIdx = struct.pack("i",bob.number_of_faces)
bNml = struct.pack("?",NORMAL)
bUV = struct.pack("?",NORMAL)
nBS = struct.pack("i",bob.number_of_blendshapes)
f.write(nBSVtx)
f.write(nVtx)
f.write(nFIdx)
f.write(bNml)
f.write(bUV)
f.write(nBS)
for bs_name in blendshape_name_list:
s = struct.Struct(str(len(bs_name))+"s")
f.write(struct.pack("i",len(bs_name)))
f.write(s.pack(str(bs_name)))
print binascii.hexlify(nBSVtx)
print binascii.hexlify(nVtx)
print binascii.hexlify(nFIdx)
print binascii.hexlify(bNml)
print binascii.hexlify(bUV)
print binascii.hexlify(nBS)
...
但是,调试结果(使用print)是
2805
2930
5700
f50a0000
720b0000
44160000
01
01
05000000
但是在二进制文件中,值与前者不同。它必须是'f50a0000',但现在是'3f0a0000'其他的东西是相当不错的。为什么会出现这种现象?
1 0000000: 3f0a 0000 720b 0000 4416 0000 0101 0500 ?...r...D.......
2 0000010: 0000 0600 0000 7242 6c69 6e6b 0600 0000 ......rBlink....
3 0000020: 6c42 6c69 6e6b 0600 0000 6c53 6d69 6c65 lBlink....lSmile
4 0000030: 0600 0000 7253 6d69 6c65 0400 0000 6f70 ....rSmile....op
5 0000040: 656e 3f3f 1d3f 093f 6741 3f58 3f3f 3f3f en??.?.?gA?X????
6 0000050: 1d3f 4711 7541 3f3f 063f 3f3f 3f23 7747 .?G.uA??.????#wG
7 0000060: 6f41 3f53 3f3f 3f3f 1d3f 1e3f 7e41 1a3a oA?S????.?.?~A.:
8 0000070: 553f 3f3f 1d3f 1e3f 7e41 1a3a 553f 3f3f U???.?.?~A.:U???
9 0000080: 1d3f 782e 3f41 3f5f 403f 3f3f 1d3f 782e .?x.?A?_@???.?x.
10 0000090: 3f41 3f5f 403f 3f3f 1d3f 5b71 7c41 5f4b ?A?_@???.?[q|A_K
11 00000a0: 6b3f 3f3f 1d3f 5b71 7c41 5f4b 6b3f 3f3f k???.?[q|A_Kk???
12 00000b0: 1d3f 2c3f 7d41 012d 2c3f 3f3f 1d3f 2c3f .?,?}A.-,???.?,?
13 00000c0: 7d41 012d 2c3f 3f3f 3f23 3f3f 7641 6119 }A.-,????#??vAa.
14 00000d0: 3f3f 3f3f 3f23 3f3f 7641 6119 3f3f 0000 ?????#??vAa.??..