[英]Convert a char array of 0 and 1 to bytes in C++
我在這里有一個問題。 這聽起來對您來說微不足道,但對我而言卻並非如此,因為我在C ++中還是個菜鳥。 (也對我有限的英語知識感到抱歉)
假設我有一個char a[72]
數組。 該數組填充有代表位的'0'
和'1'
( a[0] = '0'
, a[1] = '1'
, a[2] = '1'
等),我需要保存作為二進制文件,因此當我嘗試使用xxd -b查看此文件時,我希望看到這9個字節,就像它們在數組中一樣。
可以請任何人帶我到解決方案中如何轉換此char數組嗎?
您需要將數組分成8個符號的組,並將每個組從二進制字符串表示形式轉換為無符號字符。 例如:
unsigned char byte = 0;
for( int i = 0; i < 8; ++i )
if( a[i] == '1' ) byte |= 1 << (7-i);
然后將該字節放入另一個大小為72/8的數組中,並將其存儲到文件中,例如通過std::ostream::write()
方法。 您可以按16、32或64位對位進行分組,並使用uint16_t
, uint32_t
或uint64_t
作為值,但是這種方式最簡單,您可能應該從它開始並使其首先起作用。
也許像這樣?
const std::size_t n = 72;
std::vector<char> byteArray(n / 8);
for (std::size_t i = 0; i < n / 8; ++i)
for (std::size_t j = 0; j < 8; ++j)
if (a[i * 8 + j] == '1')
byteArray[i] |= 1 << j;
然后使用operator[]()
或data()
訪問byteArray
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.