#include #include #include #include static void BitStrGen(void) { char str[64] = { 0 }; for (DWORD i = 0; i < 256;) { printf("\t"); for (DWORD j = 0; j < 4; j++) { if (0) { /* Least Significant Bit First */ str[0] = (i & (1 << 7)) ? '1' : '0'; str[1] = (i & (1 << 6)) ? '1' : '0'; str[2] = (i & (1 << 5)) ? '1' : '0'; str[3] = (i & (1 << 4)) ? '1' : '0'; str[4] = (i & (1 << 3)) ? '1' : '0'; str[5] = (i & (1 << 2)) ? '1' : '0'; str[6] = (i & (1 << 1)) ? '1' : '0'; str[7] = (i & (1 << 0)) ? '1' : '0'; str[8] = '\0'; } else { /* Most Significant Bit First */ str[7] = (i & (1 << 7)) ? '1' : '0'; str[6] = (i & (1 << 6)) ? '1' : '0'; str[5] = (i & (1 << 5)) ? '1' : '0'; str[4] = (i & (1 << 4)) ? '1' : '0'; str[3] = (i & (1 << 3)) ? '1' : '0'; str[2] = (i & (1 << 2)) ? '1' : '0'; str[1] = (i & (1 << 1)) ? '1' : '0'; str[0] = (i & (1 << 0)) ? '1' : '0'; str[8] = '\0'; } printf("\"%s\",%s", str, j == 3 ? "" : " "); i++; } printf("\n"); } } int TestBitStream(int argc, char* argv[]) { wBitStream* bs = NULL; BYTE buffer[1024] = { 0 }; WINPR_UNUSED(argc); WINPR_UNUSED(argv); bs = BitStream_New(); if (!bs) return 1; BitStream_Attach(bs, buffer, sizeof(buffer)); BitStream_Write_Bits(bs, 0xAF, 8); /* 11110101 */ BitStream_Write_Bits(bs, 0xF, 4); /* 1111 */ BitStream_Write_Bits(bs, 0xA, 4); /* 0101 */ BitStream_Flush(bs); BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); BitStream_Write_Bits(bs, 3, 2); /* 11 */ BitStream_Write_Bits(bs, 0, 3); /* 000 */ BitStream_Write_Bits(bs, 0x2D, 6); /* 101101 */ BitStream_Write_Bits(bs, 0x19, 5); /* 11001 */ // BitStream_Flush(bs); /* flush should be done automatically here (32 bits written) */ BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); BitStream_Write_Bits(bs, 3, 2); /* 11 */ BitStream_Flush(bs); BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); BitStream_Write_Bits(bs, 00, 2); /* 00 */ BitStream_Write_Bits(bs, 0xF, 4); /* 1111 */ BitStream_Write_Bits(bs, 0, 20); BitStream_Write_Bits(bs, 0xAFF, 12); /* 111111110101 */ BitStream_Flush(bs); BitDump(__func__, WLOG_INFO, buffer, bs->position, BITDUMP_MSB_FIRST); BitStream_Free(bs); return 0; }