這裏是小端位移的代碼,我想將它轉換成大端位移。 請幫我一把。實際上這是使用little endian shift的LZW解壓縮代碼。 但我想要大端代碼如何在C++中移位big endian中的位
unsigned int input_code(FILE *input)
{
unsigned int val;
static int bitcount=0;
static unsigned long inbitbuf=0L;
while (bitcount <= 24)
{
inbitbuf |=(unsigned long) getc(input) << (24-bitcount);
bitcount += 8;
}
val=inbitbuf >> (32-BITS);
inbitbuf <<= BITS;
bitcount -= BITS;
return(val);
}
void output_code(FILE *output,unsigned int code)
{
static int output_bit_count=0;
static unsigned long output_bit_buffer=0L;
output_bit_buffer |= (unsigned long) code << (32-BITS-output_bit_count);
output_bit_count += BITS;
while (output_bit_count >= 8)
{
putc(output_bit_buffer >> 24,output);
output_bit_buffer <<= 8;
output_bit_count -= 8;
}
}
你是說這個文件是big endian嗎?在這種情況下平臺的字節順序無關緊要,因爲內存中沒有單獨的字節正在被尋址。 –
@VaughnCato * data *是大端,這個代碼讀/寫一個大端格式(這是獨立於平臺端)。例如首先讀入LSB而不是'inbitbuf'的MSB,它會讀取小端數據。 – nos
非常感謝 – Rokso