请问各位,我有这样一个CLASS
CLASS A
{bool a;
 bool b;
 bool c;
 int d;}
写入文件后发现数据部分占了8个字节,第3个bool后自动填充了一个字节,当我Read的时候,编译器也跳过了那个填充的字节,我想问有办法不条过那个字节吗?
内存里大概是这样的,
  01   01   01   00     00 00 00 60
 bool bool bool 填充       int 
CLASS A
{bool a;
 bool b;
 bool c;
 int d;}
然后
A myA;我把myA写入文件后在读出来后是这样
 01   01   01   00     00 00 00 60
 bool bool bool 填充       int 
当然相应的成员变量我已经赋过值了我发现可能是32位的原故,CFile 无论Write Read 都是4个字节一读或一写,如果当前4字节可以写下变量就写,写不下变量就条转到下4个字节去写,无论当前的4位字节有没有写完有没有人有办法改变这个机制?

解决方案 »

  1.   

    project->settings->c/c++
    category:选择code Cgeneration
    suruct member alignment:改成1byte的
      

  2.   

    无论Write Read 都是4个字节一读或一写,如果当前4字节可以写下变量就写,写不下变量就条转到下4个字节去写,无论当前的4位字节有没有写完
    -----------------------------------------------------------------
    没有这一说;看看你读些的那些代码。
      

  3.   

    project->settings->c/c++
    category:选择code Cgeneration
    suruct member alignment:改成1byte的
    -------------------------------------
    这样没用,而且这里是设的结构体的成员把?
    实际情况是这样
     01 01 01 FF 00 00 00 06
    我想从这个FF开始读,但程序是从00开始读的,
    程序为myFile.Read(myA,sizeof(myA));
    myA有4个变量 3个bool 一个int
    有办法解决吗?
      

  4.   

    CLASS A
    {int a;
     int b;
     int c;
     int d;}
      

  5.   

    没有什么奇怪的,学学VC字节对齐机制就知道了,要不跳就在前面加上 #pragma pack(1)
      

  6.   

    byte alignment各位说的这个是在哪里设置的?
    suruct member alignment:改成1byte的,这个方法我用过了,没用,还是跳过了那个字节
      

  7.   

    #pragma pack(1)
    tufaqing()说的没错
      

  8.   

    myFile.Read(myA,sizeof(myA));好象不对哦应该是myFile.Read(&myA,sizeof(myA));这样吧!你试试,不然你传给Read函数的第一个参数根本不是myA变量在内存中的地址
    &myA才是myA的内存起始地址