读书人

有关位域的有关问题

发布时间: 2012-09-05 15:19:34 作者: rapoo

有关位域的问题
将一个int数组存成bin文件,格式本应该为
00000000h:00 D8 7F FA 77 7F F3 07 7F ED A7 7E E7 47 7E E1
......
也就是数组的第一个数是800,也就是2048,第二个数是7FD,也就是2045,以此类推,但是我的代码写出来以后是以00 D8 7F代表一个int型整数,该怎么改?
附上代码

#include <stdio.h>
//C语言风格
typedef struct tagMYTYPE
{
int a : 12; /*12位,最大为2^11 - 1 ,最小为-2^11*/
char b; /*内存填充,保证是4*8 = 32 的倍数,当然也可以不用,系统自动保留*/
}MYTYPE ;

int main()
{
MYTYPE Array[4096];
int i = 0;
FILE *fp = NULL;
if (NULL == (fp = fopen("Data.db","wb"))) /*wb,以二进制文件写入*/
{
return -1;
}

/*赋值部分*/
for (i = 0; i < 4096; i++)
{
Array[i].a = i;
}
/*输出到屏幕并写入文件*/
for (i = 0; i < 4096; i++)
{
fwrite(&(Array[i]), 3,1,fp);//每次写入1个元素,每个元素宽度为3,即3*4=12
printf("%d\t", Array[i].a);
}

fclose(fp);
return 0;
}

[解决办法]
fwrite(&(Array[i]), 3,1,fp);//每次写入1个元素,每个元素宽度为3,即3*4=12
你这里已经指定了,每个值使用3个字节表示了, 你保存成二进制,当然会使用3个字节表示了哦.
要改就只有这里改了,
fwrite(&(Array[i]), 3,1,fp); 把每个值使用其它字节数写入,比如把3改成2或者1,就只保存2个字节或者1个字节,当然,这样会让你原来的数丢失一些数据了.

其实如果你是为了省磁盘空间而把int类型,硬是要改变表示字节数的话,那是完全没有必要的.
该怎么存就怎么存,用4个字节表示又如何.
只要保存数据能正确, 几个字节保存的,就几个字节读取.
如果实在很大,就写完后作下压缩.
[解决办法]
对电脑而言只有二进制字节,对人脑才有数、int、……

读书人网 >C++

热点推荐