Tôi có một mảng 128 boolean đại diện cho bit. Làm thế nào tôi có thể chuyển đổi các đại diện 128 bit thành 16 byte?Làm cách nào để chuyển đổi bit thành byte?
Ví dụ:
Tôi có một mảng mà trông như thế này:
0110001100110000100010111011001011010011010001010001101101001100
1000010000000000001000111111111101000011111001111011111011111001
(Chuyển Đổi Sang 1s và 0s là ngắn gọn hơn)
tôi cần phải chuyển đổi những bit như sau mảng byte:
99 48 139 178 211 69 27 76 132 0 35 255 67 231 190 249
EDIT: Điều này dường như không hoạt động:
public byte[] ToByteArray() {
int numBytes = Count/8;
if (_bits.Count % 8 != 0) numBytes++;
byte[] bytes = new byte[numBytes];
int byteIndex = 0, bitIndex = 0;
for (int i = 0; i < _bits.Count; i++) {
if (_bits[i])
bytes[byteIndex] |= (byte)(1 << bitIndex);
bitIndex++;
if (bitIndex == 8) {
bitIndex = 0;
byteIndex++;
}
}
return bytes;
}
Nó ra:
198 12 209 77 203 162 216 50 33 0 196 255 194 231 125 159
Bạn có thể loại bỏ các biến 'byteIndex' bằng công (%) điều hành modulo. byte [bitIndex% 8] – arul
@arul, tôi nghi ngờ bạn đang nghĩ đến phân chia số nguyên. Modulo sẽ phải được sử dụng ở phía bên phải của nhiệm vụ. 'bytes [bitIndex/8] | = (byte) (1 << (bitIndex% 8))' –