认真拜读后很有启发多谢了。你的大作中有的地方还请再指教一下。
《對二進制數據10110000 10001010 11101101,它的十六進制表示形式為0xB08AED,十進制表示形式為11569901(其實都是同一個數,計算機就只認識二進制那個,其餘都是給人看的),是3個8位BYTE數據構成的一串,我們可以用不同的視角看待它。如果是一個完整的整數,它就是十進制11569901;如果是3個整數的數組,它就是十進制{237,138,176},十六進制的{B0,8A,ED};如果是字符串,就是CHR(237)+CHR(138)+CHR(176)》
问题1:
(a)如果是3個整數的數組,它就是十進制{237,138,176}它{ }中的值是不是:237->11101101,138-->10001010,176->1011000,
它的顺序与上面二进制数据中的顺序相反,变成低 中 高。是不是你后面讲到的内存格式是低位在前,高位在后?
(b)如果是字符串,就是CHR(237)+CHR(138)+CHR(176)排列顺序相反。同上理由 ?
(c)十六進制的{B0,8A,ED}排列顺序与上面二进制数据是一一对应的,为什么?
<WORD類型,是16位的,由2個BYTE構成,它的內存格式是{a,b},其中a是低位,b是高位(這是Intel處理器的特點,不是所有處理器都是這樣的)。對WORD值0xB0ED來說,我們現在看到B0在前、ED在後,但在計算機內存中其實是ED在前、B0在後,所有整數都是按先低後高的次序一路排列。因此,要轉換0xB0ED為C接受的內存格式,就要按同樣的順序,寫CHR(0xED)+CHR(0xB0),即所謂ED是低位、B0是高位,與人眼看到的0xB0ED相同。對RGB(red,green,blue)顏色值,是CHR(blue)+CHR(green)+CHR(red),這樣格式的內存數據,因為反過來讀,才叫RGB,這個數的十六進制形式,看起來就是藍綠紅。>
问题2因此,要轉換0xB0ED為C接受的內存格式,就要按同樣的順序,寫CHR(0xED)+CHR(0xB0),即所謂ED是低位、B0是高位,與人眼看到的0xB0ED相同。后半句与前半句不相应,人眼看到的高位在前,低位在后,内存格式是低位在前高位在后。
[ 本帖最后由 sylknb 于 2012-1-20 16:39 编辑 ]
《對二進制數據10110000 10001010 11101101,它的十六進制表示形式為0xB08AED,十進制表示形式為11569901(其實都是同一個數,計算機就只認識二進制那個,其餘都是給人看的),是3個8位BYTE數據構成的一串,我們可以用不同的視角看待它。如果是一個完整的整數,它就是十進制11569901;如果是3個整數的數組,它就是十進制{237,138,176},十六進制的{B0,8A,ED};如果是字符串,就是CHR(237)+CHR(138)+CHR(176)》
问题1:
(a)如果是3個整數的數組,它就是十進制{237,138,176}它{ }中的值是不是:237->11101101,138-->10001010,176->1011000,
它的顺序与上面二进制数据中的顺序相反,变成低 中 高。是不是你后面讲到的内存格式是低位在前,高位在后?
(b)如果是字符串,就是CHR(237)+CHR(138)+CHR(176)排列顺序相反。同上理由 ?
(c)十六進制的{B0,8A,ED}排列顺序与上面二进制数据是一一对应的,为什么?
<WORD類型,是16位的,由2個BYTE構成,它的內存格式是{a,b},其中a是低位,b是高位(這是Intel處理器的特點,不是所有處理器都是這樣的)。對WORD值0xB0ED來說,我們現在看到B0在前、ED在後,但在計算機內存中其實是ED在前、B0在後,所有整數都是按先低後高的次序一路排列。因此,要轉換0xB0ED為C接受的內存格式,就要按同樣的順序,寫CHR(0xED)+CHR(0xB0),即所謂ED是低位、B0是高位,與人眼看到的0xB0ED相同。對RGB(red,green,blue)顏色值,是CHR(blue)+CHR(green)+CHR(red),這樣格式的內存數據,因為反過來讀,才叫RGB,這個數的十六進制形式,看起來就是藍綠紅。>
问题2因此,要轉換0xB0ED為C接受的內存格式,就要按同樣的順序,寫CHR(0xED)+CHR(0xB0),即所謂ED是低位、B0是高位,與人眼看到的0xB0ED相同。后半句与前半句不相应,人眼看到的高位在前,低位在后,内存格式是低位在前高位在后。
[ 本帖最后由 sylknb 于 2012-1-20 16:39 编辑 ]