簡體   English   中英

屏蔽n個字節

[英]Mask by n bytes

我努力地將uint64_t變量屏蔽了N個字節。 我不知道N,但是我知道它是8或更小。 我當前的代碼如下所示:

// uint64_t n is given
uint64_t mask;
for( mask = 0x00; n; n--) {
    mask = mask<<8 | 0xFF;
}

制作口罩。 我在這里做錯了什么?

編輯:
問題得到了回答。 無論如何,為了更好地理解:

我想要一個這樣的面具:

0x000000FF // or:
0x0000FFFF // or:
0x00FFFFFF

從數據中取出1、2或更多字節。 正如評論所說,我的代碼有效! 也許我還有一個錯誤!

根據[操作員優先級表1],它應該可以工作。

盡管如此,將其編寫為:

mask <<= 8;
mask |= 0xff;

要么:

mask = (mask << 8) | 0xff;

當然,您也可以使用查找表來完成此操作。

我不確定問題是否正確,但您的面具看起來像

0x00000000000000ff
0x000000000000ffff
0x0000000000ffffff
...

我假設您想要以下內容來屏蔽單個字節:

0x00000000000000ff
0x000000000000ff00
0x0000000000ff0000
...

為此,您可以使用例如以下代碼:

for( mask = 0xff; n; n--) {

    // Use the mask HERE
    ...

    mask = mask<<8;
}

您可以使用此代碼段在src中用dest mask替換byteno個字節:

uint64_t replacemyByte(uint64_t src, uint64_t byteno,uint64_t dest) 
{
    uint64_t shift = (dest << (8 * byteno));
    uint64_t mask = 0xff << shift;
    return (~mask & src) | shift;
}

還是我把問題弄錯了?

暫無
暫無

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

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