【发布时间】:2025-11-30 01:30:01
【问题描述】:
我正在学习 C 中的位操作,并且我编写了一个简单的程序。然而程序失败了。有人可以看看这段代码吗? 基本上我想提取一个 4 字节的“长”变量并将其重新组合到它的单个字节中,反之亦然。这是我的代码:
printf("sizeof char= %d\n", sizeof(char));
printf("sizeof unsigned char= %d\n", sizeof(unsigned char));
printf("sizeof int= %d\n", sizeof(int));
printf("sizeof long= %d\n", sizeof(long));
printf("sizeof unsigned long long= %d\n", sizeof(unsigned long long));
long val = 2;
int k = 0;
size_t len = sizeof(val);
printf("val = %ld\n", val);
printf("len = %d\n", len);
char *ptr;
ptr = (char *)malloc(sizeof(len));
//converting 'val' to char array
//val = b3b2b1b0 //where 'b is 1 byte. Since 'long' is made of 4 bytes, and char is 1 byte, extracting byte by byte of long into char
//do{
//val++;
for(k = 0; k<len; k++){
ptr[k] = ((val >> (k*len)) && 0xFF);
printf("ptr[%d] = %02X\n", k,ptr[k]);
}
//}while(val < 12);
//reassembling the bytes from char and converting them to long
long xx = 0;
int m = 0;
for(m = 0; m< len; m++){
xx = xx |(ptr[m]<<(m*8));
}
printf("xx= %ld\n", xx);
为什么我没有看到 xx 返回 2?此外,无论 'val' 的值如何,ptr[0] 似乎都存储 1 :( 请帮忙
提前致谢
【问题讨论】:
-
您的内存分配似乎有错误:
ptr = (char *)malloc(sizeof(len));应该是ptr = (char *)malloc(len);否则您将为 size_t 值分配空间,而不是 long 值。在您的情况下,这可能是相同的大小,但这仍然是一个疏忽。 -
你关心便携性吗?
-
哦,是的......我应该怎么做才能改进这段代码?
标签: c bit-manipulation