我正在研究一些C程序,最近我有这个困惑,再次打我: 假设我有一个函数需要一个32位大小的变量,另一个需要8位,我们必须将数据从32位变量传送到8位变量。不同数据类型的大小导致混淆
这里是我与混乱的一个范例程序:
#include <stdio.h>
#define SIZE_OF_BLOCK 512
uint32* a = NULL; // for read
uint8* b = NULL; // for write
int read_register(uint32* rbuff)
{
uint8 i;
for (i = 0; i < SIZE_OF_BLOCK/4; i++) // here one
rbuff[i] = read_from_32_bit_reg(); // read incrementally on each iteration
return 0;
}
int write_register(uint8* wbuff)
{
uint8 i;
for (i = 0; i < SIZE_OF_BLOCK; i++) // here one
write_reg(wbuff[i]); // point 2
return 0;
}
int main()
{
a = (uint32*)malloc(sizeof(uint32) * 128); // contains 4096 bits
b = (uint8*)malloc(sizeof(uint8) * 512); // contains 4096 bits
read_register(a);
b = (uint8*)a; // point 1
write(0x0080000, b);
free(a);
free(b);
return 0;
}
1)因此,我得到的所有512个比特在128中,4字节的位置。如果我将这个值赋给一个8位的位置,我将剥掉哪一个位? MSB 8位或者Intel PC上的LSB 8位。
2)我仍然在传输4096位,'b'的地址是a的寻址位置。我是否仍然在传输所有正确的值?
它基本上是一个混乱,不能下定决心,如何接近它。
P.S.该术语被称为缩小,但如果我按照我所做的相同的方式进行操作,将32位变量的地址分配给8位变量,并以8位增量进行操作,它应该能够获得所有值?我不认为缩小发生在指针变量的情况下,因为两者都是int大小?
[将大量类型转换为更小类型]可能的副本(http://stackoverflow.com/questions/6752567/casting-a-large-number-type-to-a-smaller-type) –
In指针的情况下它是如何相同的? –
32 * 128不是512位,它是512字节。 – stark