首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关位域的有关问题

2012-09-05 
有关位域的问题将一个int数组存成bin文件,格式本应该为00000000h:00 D8 7F FA 77 7F F3 07 7F ED A7 7E E7

有关位域的问题
将一个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、……

热点排行