以深发展1997年1月2日的数据为例:
* 00000000h: 36 B8 30 01 72 06 00 00 86 06 00 00 60 06 00 00 ;
* 00000010h: 72 06 00 00 77 69 D4 4C 68 FE 66 00 74 06 00 00 ;
* 以下是分解 00000000h:|36 B8 30 01|72 06 00 00|86 06 00 00|60 06 00 00|;
* [36 B8 30 01] = * 0x0130B836 = 19970102 日期[unsigned long]
* [72 06 00 00] = 0x00000672 = 1650/100 = 16.50 开盘[unsigned long]
* [86 06 00 00] = 0x00000686 = 1670/100 = 16.70 最高[unsigned long]
* [60 06 00 00] = 0x00000660 = 1632/100 = 16.32 最低[unsigned long]
* 00000010h:|72 06 00 00|77 69 D4 4C|68 FE 66 00|74 06 00 00|;
* [72 06 00 00] = 0x00000672 = 1650/100 = 16.50 收盘[unsigned long]
* [77 69 D4 4C] = 0x4CD46977 = 111365048.0 成交额[float]
* [68 FE 66 00] = 0x0066FE68 = 6749800 成交量[unsigned long]
想请大神 如何处理[77 69 D4 4C] = 0x4CD46977 = 111365048.0 成交额[float] 这个始终无法理解
文章还是没太明白为什么有大小端模式,就是说如果一个32位的CPU要表示16位的short数字的时候,那么这个数字的高8位放在32位CPU的哪个字节的问题?如果是这样,我不明白为什么会出现这个问题?规定一个不就行了么?比如说必须是大端模式(或者必须是小端模式),这是因为各个CPU的实现不同造成的么?
@顾晓北: 不是,是没有从硬件上限制,也没法限制如何将一个“整体”的“多个部分”映射到寄存器上,那么如何存储,需要实现方用一定的“协议”来保证,比如我们现在看到的大端小端模式。可以用 SOCKET 编写 TCP 程序为例,如果你想实现消息交互,你必须在 TCP 之上实现“协议”(比如 HTTP、 FTP)来保证你的消息的完整性,因为 TCP 没有,也不可能保证“消息”的多个部分“同时”到达接收端。
@Launcher: 能举一个比较贴近生活的例子么?呵呵
@顾晓北: 英联邦汽车靠左行,中国汽车靠右行。
@Launcher: 那你意思还是不同CPU厂商的实现不同造成的么?
@顾晓北: CPU 实现不同,OS 实现不同,编译器实现不同,应用实现不同。按照这个顺序,上一层总能屏蔽下一层的不同,但是绝大多数程序员都没这么做。