0
A
回答
1
這是真的嗎?
char buf[1];
buf[0] = char(1);
如果你想位屏蔽那麼它會是這樣的
enum Enum
{
MASK_01 = 0x1,
MASK_02 = 0x2,
MASK_03 = 0x4,
MASK_04 = 0x8,
};
char buf[4];
buf[0] = Enum::MASK_01;
buf[1] = Enum::MASK_02;
buf[2] = Enum::MASK_03;
buf[3] = Enum::MASK_04;
如果你提供你所真正想要做的信息,我們也許能夠幫助你。
編輯:謝謝你的額外信息。這是否幫助:
enum Enum
{
BIT_0000000000000001 = 0x0001,
BIT_0000000000000010 = 0x0002,
BIT_0000000000000100 = 0x0004,
BIT_0000000000001000 = 0x0008,
BIT_0000000000010000 = 0x0010,
BIT_0000000000100000 = 0x0020,
BIT_0000000001000000 = 0x0040,
BIT_0000000010000000 = 0x0080,
BIT_0000000100000000 = 0x0100,
BIT_0000001000000000 = 0x0200,
BIT_0000010000000000 = 0x0400,
BIT_0000100000000000 = 0x0800,
BIT_0001000000000000 = 0x1000,
BIT_0010000000000000 = 0x2000,
BIT_0100000000000000 = 0x4000,
BIT_1000000000000000 = 0x8000,
};
int main(int argc, char* argv[])
{
char someArray[8];
memset(someArray, 0, 8);
// create an int with the bits you want set
int combinedBits = BIT_0000000000000001|
BIT_0000000000000010|
BIT_1000000000000000;
// clear first two bytes
memset(someArray, 0, 2);
// set the first two bytes in the array
*(int*)someArray |= combinedBits;
// retrieve the bytes
int retrievedBytes = *(int*)someArray;
// test if a bit is set
if (retrievedBytes & BIT_0000000000000001)
{
//do something
}
}
現在枚舉的命名是爲了清楚起見,故意激烈。你也可能會注意到枚舉中只有16位,而不是int中的32位。這是因爲你提到了前兩個字節。使用這種方法,只有數組的前兩個字節將被改變,使用這些枚舉。我不確定這段代碼是否會被惡意搞砸,所以你必須確保你在自己的機器上進行測試。 HTH。
+0
嘿謝謝,但我的問題是完全不同的。我正在設計一個通過UDP的可靠數據傳輸,其中在UDP數據緩衝區中是一個字符數組,並且在我的前兩個字節中,我必須放置像00010000這樣的位....等等,我想知道如何做到這一點。請讓我知道,如果你需要任何信息,提前感謝您的幫助,我真的很感激它。 – Ragy 2010-03-06 03:49:26
0
你用C把位的字符數組或C++中,你將任何東西放入其他任何東西的方式 - 他們都位反正。
由於sizeof(char) == 1
根據定義,你只能把每陣列的元件8位。
如果您需要如何玩弄位的幫助,這是一個完全不同的問題,無關與char
和數組。
2
也許這更通用的代碼會給你的想法:
void setBitAt(char* buf, int bufByteSize, int bitPosition, bool value)
{
if(bitPosition < sizeof(char)*8*bufByteSize)
{
int byteOffset= bitPosition/8;
int bitOffset = bitPosition - byteOffset*8;
if(value == true)
{
buf[byteOffset] |= (1 << bitOffset);
}
else
{
buf[byteOffset] &= ~(1 << bitOffset);;
}
}
}
//use it as follow:
char chArray[16];
setBitAt(chArray,16*sizeof(char),5,true); //to set bit at pos 5 to 1
0
C不支持二進制文字,所以你必須代表值爲十六進制。
char *p;
*p++ = 0x10;
*p++ = 0xFE;
看一看功能hton()
和htonl()
用於將多字節值到網絡字節順序。
相關問題
- 1. 如何將字符串放入矩陣?
- 2. 如何將字符串放入列表
- 3. 將字符串插入陣列中某個位置的數組
- 4. 將戰列艦的位置放入陣列[java]
- 5. 如何將ArrayList字符串放入JLabels
- 6. 如何將CSS放入字符串中?
- 7. 如何將對象放入字符串?
- 8. 如何將一列的結果放入字符串變量中?
- 9. 如何將字符串放入列表中?
- 10. 如何散列字符串以獲取陣列中的位置
- 11. 將關鍵字放入字符串矩陣(VB)
- 12. 如何將字符串數組的所有元素放入隊列(字符串)?
- 13. 如何將字符串放入MFC中的字符串表中?
- 14. 如何將文件中的字符放入char字符串中?
- 15. 陣列佔位符
- 16. 如何將PHP數組字符串放入HTML輸入字段
- 17. 如何將字符串放入Java中的字節數組中的位置?
- 18. 將3D Numpy陣列放入ITK SNAP
- 19. 操縱HTML並將其放入陣列
- 20. 將列放入空的稀疏矩陣
- 21. 是否可以將ERB放入simple_form佔位符字符串中?
- 22. 如何使陣列字符串列表
- 23. 將陣列推入陣列
- 24. C# - 將兩個2D陣列放入一個3D陣列中
- 25. 如何將SimplePie機箱鏈接放入陣列中
- 26. ViM:如何將輸入對話框中的字符串放入列表中
- 27. R - 使它更快:檢查矩陣位置的字符並將信息放入列表中(0/1)
- 28. 如何將圖標放入角度材質的佔位符中?
- 29. 如何將圖像放入jEditable佔位符?
- 30. 如何將位圖轉換爲字節陣列
對於位twiddling請參閱http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c – SiegeX 2010-03-05 01:57:44
@Ragy:讓我們說我們想要寫一個函數來完成這個工作,函數簽名是什麼?特別是,你會如何表達你的「比特」? – Arun 2010-03-05 02:04:45