gpt4 book ai didi

c - C 中恰好一个字节的位掩码

转载 作者:行者123 更新时间:2023-12-02 18:46:49 25 4
gpt4 key购买 nike

我的目标是拯救 long四字节 like this :

unsigned char bytes[4];
unsigned long n = 123;

bytes[0] = (n >> 24) & 0xFF;
bytes[1] = (n >> 16) & 0xFF;
bytes[2] = (n >> 8) & 0xFF;
bytes[3] = n & 0xFF;

但我希望代码是可移植的,所以我使用 CHAR_BIT来自<limits.h> :

unsigned char bytes[4];
unsigned long n = 123;

bytes[0] = (n >> (CHAR_BIT * 3)) & 0xFF;
bytes[1] = (n >> (CHAR_BIT * 2)) & 0xFF;
bytes[2] = (n >> CHAR_BIT) & 0xFF;
bytes[3] = n & 0xFF;

问题在于位掩码 0xFF只占8位,并不一定相当于1个字节。有没有办法让上层代码完全移植到所有平台?

最佳答案

怎么样:

unsigned long mask = 1;
mask<<=CHAR_BIT;
mask-=1;

然后使用它作为掩码而不是0xFF

测试程序:

#include <stdio.h>

int main() {
#define MY_CHAR_BIT_8 8
#define MY_CHAR_BIT_9 9
#define MY_CHAR_BIT_10 10
#define MY_CHAR_BIT_11 11
#define MY_CHAR_BIT_12 12
{
unsigned long mask = 1;
mask<<=MY_CHAR_BIT_8;
mask-= 1;
printf("%lx\n", mask);
}
{
unsigned long mask = 1;
mask<<=MY_CHAR_BIT_9;
mask-= 1;
printf("%lx\n", mask);
}
{
unsigned long mask = 1;
mask<<=MY_CHAR_BIT_10;
mask-= 1;
printf("%lx\n", mask);
}
{
unsigned long mask = 1;
mask<<=MY_CHAR_BIT_11;
mask-= 1;
printf("%lx\n", mask);
}
{
unsigned long mask = 1;
mask<<=MY_CHAR_BIT_12;
mask-= 1;
printf("%lx\n", mask);
}
}

Output :

ff
1ff
3ff
7ff
fff

关于c - C 中恰好一个字节的位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67324002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com