C:构建一个字节
我有一个包含16个元素的数组。 我想将这些评估为布尔值0或1,然后将其存储在2个字节中,以便我可以写入二进制文件。 我该怎么做呢?
你的意思是这样的吗?
unsigned short binary = 0, i; for ( i = 0; i < 16; ++i ) if ( array[i] ) binary |= 1 << i; // the i-th bit of binary is 1 if array[i] is true and 0 otherwise.
您必须使用按位运算符 。
这是一个例子:
int firstBit = 0x1; int secondBit = 0x2; int thirdBit = 0x4; int fourthBit = 0x8; int x = firstBit | fourthBit; /*both the 1st and 4th bit are set */ int isFirstBitSet = x & firstBit; /* Check if at least the first bit is set */
int values[16]; int i; unsigned short word = 0; unsigned short bit = 1; for (i = 0; i < 16; i++) { if (values[i]) { word |= bit; } bit <<= 1; }
这个解决方案避免在循环内部使用if:
unsigned short binary = 0, i; for ( i = 0; i < 16; ++i ) binary |= (array[i] != 0) << i;
声明一个包含两个字节的数组result
,然后遍历源数组:
for (int i = 0; i < 16; i++) { // calclurate index in result array int index = i >> 3; // shift value in result result[index] <<= 1; // check array value if (theArray[i]) { // true, so set lowest bit in result byte result[index]++; } }
像这样的东西。
int values[16]; int bits = 0; for (int ii = 0; ii < 16; ++ii) { bits |= (!!values[ii]) << ii; } unsigned short output = (unsigned short)bits;
表达式(!! values [ii])强制该值为0或1,如果您确定值数组已经包含0或1而没有别的,则可以离开!!
如果你不喜欢!!你也可以这样做! 句法。
int values[16]; int bits = 0; for (int ii = 0; ii < 16; ++ii) { bits |= (values[ii] != 0) << ii; } unsigned short output = (unsigned short)bits;