簡體   English   中英

如何從二進制文件中讀取倒數?

[英]How to read reversed number from a binary file?

我想從C中的二進制文件中讀取32位數字。問題是位的順序相反。 例如,3位數字110代表3,而不代表6。開始時,我們具有最低有效位(2 ^ 0),然后是2 ^ 1,依此類推。 有沒有簡單的方法可以在C中執行此操作,還是我必須自己編寫所有邏輯(讀取第一位,將其乘以2 ^ 0,相加后再重復至末尾)?

您有許多可能的方法:

便攜性:

(不是我的算法)

uint32_t rev(uint32_t x)
{
    x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
    x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
    x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
    x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
    return((x >> 16) | (x << 16));
}

要么

uint32_t bit_reverse_4bytes(uint32_t x)
{
    x = ((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4);
    x = ((x & 0xCCCCCCCC) >> 2) | ((x & 0x33333333) << 2);
    return ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1);
}

幼稚

uint32_t naiverevese(uint32_t x)
{
    uint32_t result = 0;
    for(int i = 0; i < 32; i++)
    {
        result |= x & 1;
        result <<=1;
        x >>= 1;
    }
    return result;
}

或查詢表。

不是便攜式的,但是最有效的:

許多處理器對此都有特殊說明,例如:

ARM- rbit和內部unsigned int __rbit(unsigned int val)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM