我想用它返回應該包含8個比特的信息,在小尾數格式的uint32_t
功能位。可能有人給我如何提取從uint32_t
型這些位爲字符,布爾值或到任何其他類型不需要使用部隊來處理一些C++代碼!因爲現在我沒有耐心來理解整體概念。而更多的我淺搜索您的理解更爲複雜,似乎...謝謝!讀取uint32_t的
PS。雖然我覺得不是我所期待的,如果有人也可以張貼在一個如何能夠編碼8位一些代碼(例如8個布爾)在uint32_t
將是有趣的,這將有助於我理解這個概念。謝謝!
我想用它返回應該包含8個比特的信息,在小尾數格式的uint32_t
功能位。可能有人給我如何提取從uint32_t
型這些位爲字符,布爾值或到任何其他類型不需要使用部隊來處理一些C++代碼!因爲現在我沒有耐心來理解整體概念。而更多的我淺搜索您的理解更爲複雜,似乎...謝謝!讀取uint32_t的
PS。雖然我覺得不是我所期待的,如果有人也可以張貼在一個如何能夠編碼8位一些代碼(例如8個布爾)在uint32_t
將是有趣的,這將有助於我理解這個概念。謝謝!
字節順序不應該在這裏的一個問題。你試過了嗎?
小尾數是指組成uint32_t的字節具有存儲在最低的內存地址中的至少顯著字節,在最高最顯著。當提取位時,Endian-ness不應該輸入圖片。如果您正在通過char *訪問uint32_t變量,它只會進入圖片。
#include <iostream>
#include <cstdint>
using namespace std;
int main()
{
unsigned char ch;
uint32_t u32;
bool b0, b1, b2, b3, b4, b5, b6, b7;
// If the 8 bits you need are the least significant ones then getting
// them is as easy as:
u32 = 73;
ch = u32 & 0xFF;
cout << ch << endl;
// To encode boolean variables is just as easy:
b0 = b1 = b3 = b5 = 0;
b2 = b4 = b6 = b7 = 1;
u32 = (b0 << 0) | (b1 << 1) | (b2 << 2) | (b3 << 3) | (b4 << 4) |
(b5 << 5) | (b6 << 6) | (b7 << 7);
cout << hex << u32 << endl;
return 0;
}
當訪問一個變量,它會自動由系統(在86的情況下,小端)的默認字節順序加載的,所以如果你想低8位,只敷個面膜和獲取值
x = someint32 & 0xff;
同樣地,分配char
成int
,或使用它在表達將擴展(有符號或零依賴於炭的signess),字節序不應該在這裏是一個問題。如果您想直接訪問內存,則只應該注意字節順序。
在C A樣品,使用union
來強制的整數,並且在相同的地址空間組合的位的值以及與位域b0..b7
持有單個比特值:
#include <stdio.h>
union Bitfields {
unsigned int as_int;
struct {
unsigned char b0:1,b1:1,b2:1,b3:1,
b4:1,b5:1,b6:1,b7:1;
} as_bit;
};
int main (void)
{
Bitfields bitfield;
bitfield.as_int = 73;
printf ("%u %u %u\n", bitfield.as_int, bitfield.as_bit.b0, bitfield.as_bit.b1);
return 0;
}
這允許容易讀/寫訪問到整數值和每個獨立的位,任何更方便。
嗯,我已經嘗試「推」uint32_t到一個字符串流並從中獲取一個字符串,但我得到的字符串只包含一個零。所以我想它不能正確提取這些位。 – venkman
你典型的stringstream不應該提取位。只是爲了記錄:我們在說什麼語言?有關位函數的引言,另請參見[位操縱](http://en.wikipedia.org/wiki/Bit_manipulation)。 – usr2564301