乙個指標轉換引起的問題及談起」高位優先,低位優先」

2021-06-08 12:19:03 字數 1571 閱讀 5228

在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...