在hp或aix機上試一下這個程式就知道int為4位元組,short為2位元組
#include
int main()
int fun(short * i)
從已有知識,我認為列印出來的是: 2,2
但是,在hp或aix機器上,
列印的結果是:
131072 20000
在具體分析之前,先介紹」高位優先,低位優先」的概念。
英文名詞叫做」
big-endian
和little-endian」,
網上找了一段說明
big-endian
和little-endian
位元組排序
位元組排序
含義
big-endian
乙個word中的高位的byte放在記憶體中這個word區域的低位址處。
little-endian
乙個word中的低位的byte放在記憶體中這個word區域的低位址處。
好了,回到上述問題,目前hp跟rs6000的機器大都是高位優先。
假設,i所代表的記憶體位址在: 0x0000 到0x0003,
即i指面的位址為0x0000
這塊記憶體初始值為
最後,函式返回,因為是大邊機器,所以i現在的值是:
0x 2 00 00,即上述所描述的。
以前在pc上,都是低位優先,所以經常把指標型別強轉了一下就用了,但是在hp,或rs6000等這種機器上開發,就造成了很大的問題。把這個問題提出來,希望有用c語言開發的同事們也能了解並引起重視。
必須注意的是:表中乙個
word
的長度是
16位,乙個
byte
的長度是
8位。如果乙個數超過乙個
word
的長度,必須先按
word
分成若干部分,然後每一部分
(即每個
word內部)
按big-endian
或者little-endian
的不同操作來處理位元組。
乙個例子:
如果我們將
0x1234abcd
寫入到以
0x0000
開始的記憶體中,則結果為
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
乙個指標引起的問題,尋求高人指點
自己寫的一段測試 如下 include include int getxmltagvalue2 char pdata,char ptag,char value phead j ptail phead while ptail while phead ptail printf d n j return ...
乙個沒有索引引起的問題
這個案例說來也很簡單。話說我們公司舊版本的 mediation 系統每天都需要從各個 network element ne 的伺服器上採集 cdr,採集程式一般都是用 expect 寫的,其實就是 ftp到對方的機器上拷貝檔案過來。ne裡的 cdr一般不會輕易做 house keep ftp登入之後...
乙個sql引起的丟錶問題
背景 乙個已經執行了一段時間的老系統線上存在這種業務邏輯 start transaction drop tables if.a backup drop tables if.a tmp create table a tmp like a load into a tmp rename table a a...