[英]Understanding uint32_t char typecast (Bytes)
可以說我們有這個:
int main()
{
int32_t* value = (uint32_t*)malloc(sizeof(uint32_t));
uint32_t array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
*value = *(uint32_t*)((char*)array + 8);
printf("Value is: %d\n", *value);
return 0;
}
在這種情況下,該值為3。為什么會這樣呢? 如果我們將uint32_t強制轉換為char,是否表示uint32_t中一個char為4字節,因此
array[9] = {0, 4, !!8!!, 12, 16, 20, 24, 28, 32};
有人可以解釋一下嗎?
初始化數組時,每個初始化程序都會設置數組的元素,而不管每個元素占用多少字節。
您的計算機可能正在使用低端字節序。 這意味着array
在內存中看起來像這樣:
-----------------------------------------------------------------
| 1 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | ...
-----------------------------------------------------------------
| [0] | [1] | [2] | [3] | ...
uint32_t
類型的每個值的長度為4個字節,最低有效字節在前。
這樣做(char*)array
的是管型array
(轉換為指針),以一個char *
,所以在任何指針運算char *
通過的尺寸增加的地址char
,也就是1。
所以(char*)array + 8
點在這里:
(char*)array + 8 ------------------
v
-----------------------------------------------------------------
| 1 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | ...
-----------------------------------------------------------------
| [0] | [1] | [2] | [3] | ...
然后將該指針轉換為uint32_t *
並取消引用,因此它讀取值3。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.