在C中,在Unix环境(Plan9)中,我有一个数组作为内存。
uchar mem[32*1024];
我需要该数组包含不同的字段,例如int(整数),以指示内存大小和可用内存。所以,我试过这个:
uchar* memp=mem;
*memp=(int)250; //An example of size I want to assign.
我知道int的大小是4,所以我必须强制使用强制转换或类似的东西,mem的四个第一个插槽的内容在这种情况下的数字是250,它是大端。
但问题是,当我尝试按照我所解释的那样做它不起作用时。我认为类型的转换存在错误。我希望你问,我怎么能强制mem [0]到mem [3]会有大小指示,表示为int而不是uchar?
提前致谢
答案 0 :(得分:2)
像这样:
*((int*) memp) = 250;
那说“即使memp
是指向字符的指针,我希望你把它当作一个指向整数的指针,并将这个整数放在它指向的位置。”
答案 1 :(得分:2)
您是否考虑过使用工会,如:
union mem_with_size {
int size;
uchar mem[32*1024];
};
然后你不必担心施法。 (当然,您仍然需要担心字节排序,但这是一个不同的问题。)
答案 2 :(得分:1)
正如其他人指出的那样,你需要转换为指向int的指针。您还需要确保考虑对齐指针:在许多体系结构中,int需要从可被sizeof(int)整除的内存位置开始,如果您尝试访问未对齐的int,则会得到一个SIGBUS。在其他架构上,它可以工作,但速度很慢。还有一些,它很快就会起作用。
这样做的便携方式可能是:
int x = 250;
memcpy(mem + offset, &x, sizeof(x));
使用工会可能会让这更容易,所以+1给JamieH。
答案 3 :(得分:0)
将指针转换为int
,而不是再次unsigned char
!
int * memp = (int *)mem;
* memp = 250; //An example of size I want to assign.