gpt4 book ai didi

c - 如何在C中组合3个二进制数据?

转载 作者:行者123 更新时间:2023-11-30 16:19:02 24 4
gpt4 key购买 nike

我正在尝试将以下位序列组合成一个变量,然后将其转换为十进制。

*b1=0b001011;
*b2=0b101010;
*b3=0b0001;

位顺序应如下所示;

newBin=0001101010001011 (newBin=b3b2b1)

我尝试了以下代码段,但无法获得正确的十进制等值。

int combine=(*b1<<16)|(*b2<<10)|*b3;

当我 printf union 收割机时,它给出 4097,但它应该给出 6795。

如果有任何帮助/建议,我将不胜感激。

重要提示:我已经尝试过combine=(*b1<<12)|(*b2<<6)|*b3;并组合=(*b3<<16)|(*b2<<10)|*b1;结果都是一样的;4097。

在完整的程序中,我正在解析一个 32 位值。我使用了下面链接中“食指”给出的代码。

How do I get bit-by-bit data from an integer value in C?

以下是我的版本的完整代码;

int *get_bits(int n, int bitswanted){
int *bits = malloc(sizeof(int) * bitswanted);

int k;
for(k=0; k<bitswanted; k++){
int mask = 1 << k;
int masked_n = n & mask;
int thebit = masked_n >> k;
bits[k] = thebit;
}

return bits;
}

int main()
{
long r=0b0010110100111110000010110110101010000001;
int i;
int byte1,byte2,byte3,byte4,byte5;
//int *Lbits,*Mbits,*Hbits;
int bw6=6,bw4=4;

byte1 = (r>>32) & 0xFF;
byte2 = (r>>24) & 0xFF;
byte3 = (r>>16) & 0xFF;
byte4 = (r>>8) & 0xFF;
byte5 = (r>>0) & 0xFF;

int *Lbits=get_bits(byte3,bw6);
int *Mbits=get_bits(byte4,bw6);
int *Hbits=get_bits(byte5,bw4);

int combine=(Hbits<<12)|(&Mbits<<6)|Lbits;



for(i=bw6-1; i>=0;i--)
{
printf("%d", Lbits[i]);
}
printf("\n");

for(i=bw6-1; i>=0;i--)
{
printf("%d", Mbits[i]);
}
printf("\n");

for(i=bw4-1; i>=0;i--)
{
printf("%d", Hbits[i]);
}
printf("\n");

printf("%d",combine);
}

最佳答案

您的函数get_bits不会返回int或类似的值,您可以通过位移位和按位或来组合它们。它返回一个 int 数组,其中每个元素都包含单个位的值。

(通过逐一处理位,可以根据需要组合这些数组中的数据,但是这个概念还有其他陷阱,因为您必须确保不会越界访问动态分配的内存.)

这是程序的修改版本,它使用 unsigned int 而不是 int 数组。

#include <stdio.h>

unsigned int get_bits(unsigned int n, int bitswanted){
return n & ((1<<bitswanted)-1);
}

int main()
{
unsigned long r=0b0010110100111110000010110110101010000001;
int i;
int byte1,byte2,byte3,byte4,byte5;

int bw6=6,bw4=4;

byte1 = (r>>32) & 0xFF;
byte2 = (r>>24) & 0xFF;
byte3 = (r>>16) & 0xFF;
byte4 = (r>>8) & 0xFF;
byte5 = (r>>0) & 0xFF;

int Lbits=get_bits(byte3,bw6);
int Mbits=get_bits(byte4,bw6);
int Hbits=get_bits(byte5,bw4);

int combine=(Hbits<<12)|(Mbits<<6)|Lbits;

printf("%d\n",combine);
}

程序打印结果6795

参见https://ideone.com/44pjjF

关于c - 如何在C中组合3个二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725713/

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