2015-01-05 42 views
-3

我有一個十六進制的地址,比如007b183c。我想改變它的位。 我已經讀了一點(沒有雙關語意圖)有關位移和掩碼,但我不知道如何獲得位格式的地址可以這麼說。我該怎麼做呢?按位操作地址

+0

恩,你沒有把它變成任何「位格式」,它已經是一個數字了,所以只要對它進行數學計算。 – MightyPork

+0

它以字節爲單位。所以如果我將它加1,我將移動到下一個字節(sizeof(char))。可以這麼說,我無法控制住。 – tem887

+1

你的問題是廣泛的。投票結束。閱讀C中對值進行按位操作。如果您仍然感到困惑,請向您嘗試完成的任務提出具體問題。此外,一定要搜索並檢查是否有其他人問你的問題。對於編碼來說,你聽起來很陌生,確實已經有人了。 – RLH

回答

2

假設你正在談論操縱地址位,如果你有一個地址,像這樣的:

char * p = (char *)0x007b183c; 

和你想要做某種位操作,例如,說的,舍入到接下來的16字節對齊的地址,然後你轉換成合適的int類型,進行操作,然後退回,例如

char *p_aligned - (char *)(((uint_ptr_t)p + 15) & ~15); // p_aligned = 0x007b1840 
+0

謝謝。這是我正在尋找的。 – tem887

1

如果我的理解是正確的,你有一個指向某個位置,並希望在移動它。

這是行不通的。指針指向一個字節位置,在這個意義上這是不可分割的。地址的最低位指定了哪個字節。

您將不得不讀取鄰居字節,然後使用這兩個值來獲取所需的值或某種意義,但不能指向單個位。

+0

我不想「移動」它。我只想在稍後可以使用的地址中放置一些位。這些位不會被我假設的地址使用,因爲如您所說,可以分配的最小內存量是8位。 – tem887

+1

我不認爲你真的明白我寫的東西。地址是它指向的字節的INDEX。它裏面沒有未使用的位。 – MightyPork