整型陣列以字元陣列格式輸出與大 小端序

2021-09-12 01:26:17 字數 3559 閱讀 9483

仿照選題一中的**,定義乙個整型數/短整型陣列,應該如何實現?對如下**你預估的執行結果是什麼? 實際gcc 中執行結果是什麼?請解析。

#include

intmain()

;char b[6]

=;int c[2]

=;printf

("%d,%d\n"

,sizeof

(char),

sizeof

(int))

;printf

("%s\n"

,a);

printf

("%s\n"

,b);

printf

("%s\n"

,c);

return0;

}

#include

intmain()

;int b[3]

=;short c[6]

=;printf

("%d\n"

,sizeof

(float))

;printf

("%s\n"

,a);

printf

("%s\n"

,b);

printf

("%s\n"

,c);

return0;

}

輸出結果:

4

hello world

hello world

hello world

預估輸出:

1,4

hnuer

hnuer

hnuer

實際輸出

1,4

hnuer

hnuer

eunh

根據對**一的粗略了解,知道了用%s格式輸出陣列,將按照讀取字串的方式,每次讀取乙個char長度即1位元組的長度。因此要分析輸出結果,需要求出對應的c陣列的二進位制位。

將這些數轉化成對應的char型別

(72<<24)+(78<<16)+(85<<8)+101// 第乙個數

1213093221// 轉化為十進位制數字

0100 1000 0100 1110 0101 0101 0110 0101// 轉化為二進位制數

114<<24// 第二個數

1912602624// 轉化為十進位制數字

0111 0010 0000 0000 0000 0000 0000 0000// 轉化為二進位制數

然後逐一分析每個byte。

分析結果是這樣的

0100 1000 0100 1110 0101 0101 0110 0101

0100 1000 the decimalism is 72, the char is h

0100 1110 the decimalism is 78, the char is n

0101 0101 the decimalism is 85, the char is u

0110 0101 the decimalism is 101, the char is e

0111 0010 0000 0000 0000 0000 0000 0000

0111 0010 the decimalism is 114, the char is r

0000 0000 the decimalism is 0, the char is

0000 0000 the decimalism is 0, the char is

0000 0000 the decimalism is 0, the char is

decimalism的意思是十進位制。

也就是說,int陣列c如果按位轉化為char*字串,那麼輸出應該和前面幾個一樣,為hnuer才是,為什麼會反而輸出的是eunh

原來,在計算機中,有種叫做位元組序的東西。

位元組順序,又稱端序或尾序(英語:endianness),在電腦科學領域中,指儲存器中或在數字通訊鏈路中,組成多位元組的字的位元組的排列順序。

在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列。例如在c語言中,乙個型別為int的變數x位址為0x100,那麼其對應位址表示式&x的值為0x100。且x的四個位元組將被儲存在儲存器的0x100, 0x101, 0x102, 0x103位置。

位元組的排列方式有兩個通用規則。例如,乙個多位的整數,按照儲存位址從低到高排序的位元組中,如果該整數的最低有效位元組(類似於最低有效位)在最高有效位元組的前面,則稱小端序;反之則稱大端序。在網路應用中,位元組序是乙個必須被考慮的因素,因為不同機器型別可能採用不同標準的位元組序,所以均按照網路標準轉化。

例如假設上述變數x型別為int,位於位址0x100處,它的十六進製制為0x01234567,位址範圍為0x100~0x103位元組,其內部排列順序依賴於機器的型別。大端法從首位開始將是:0x100: 01, 0x101: 23,…。而小端法將是:0x100: 67, 0x101: 45,…。

—引自維基百科

舉個栗子

對於乙個型別為int,位於位址0x100處,它的十六進製制為0x12345678,位址範圍為0x100~0x103位元組的變數,它的大端序是這樣的:

縱向看

橫向看

而小端序是這樣的:

橫向看:

因此,我以為會輸出hnuer,是因為我誤把輸出字元的順序當成了從高位先輸出。而實際上,在我的計算機上,字元儲存的是位元組序是小端序。

從低位往高位讀的話,它是讀出eunh,遇到第乙個』\0』中止。 如下圖:

如果是大端序的話

從低位往高位讀,剛好就是hnuer。如下圖:

字元陣列與字串,字元陣列與字元指標(總結大全)

1.誤區 字元陣列就是字串 來自 字元陣列,完整地說叫字元型別的陣列。字元陣列不一定是字串。字串是最後乙個字元為null字元的字元陣列。字串一定是字元陣列。字元陣列的長度是固定的,其中的任何乙個字元都可以為null字元。字串只能以null結尾,其後的字元便不屬於該字串。strlen 等字串函式對字串...

整型陣列宣告與定義

當宣告陣列int arr 9 定義陣列,輸入資料截止到下標arr 6 系統自動給arr 7 arr 8 賦值為 任意值 int x 輸入資料 int i 0 記錄位數 int a 5 儲存逆序 int temp printf 輸入資料x scanf d x while x 100000 x 0 輸出...

jQuery輸出陣列以隨機順序

只是一些jquery片段的共享,以便以隨機順序顯示 排序事物。以物件字面量格式使用此功能。shuffleads function arr 演示 另乙個功能做同樣的事情。function randsort c return o 還認為這個jquery shuffle外掛程式值得包括在內。jquery ...