请教一个关于结构体的问题

liudm_1981 2006-08-31 05:56:32
最近遇到了一个结构体方面的问题:测试代码如下
#include <stdio.h>
typedef unsigned char BYTE;
int main(){
char test;
struct camAuthInd_T{
BYTE btSSDSharedFlag:1;
BYTE btAutoSSDUpdateFlag:1;
BYTE btValidteSSDFlag:1;
BYTE btReserved:5;
}demo;

demo.btSSDSharedFlag=1;
demo.btAutoSSDUpdateFlag=1;
demo.btValidteSSDFlag=1;

printf("\n%02x",test & 0xff);

}
该结构体的成语变量按照bit位进行了取值,
我在linux上执行后,执行结果是07(二进制为00000111);
而在sunOs上执行后,结果却是e0(二进制为11100000);
好像就是对应的二进制位置高低位不同了?所以想请教各位在进行bit位存取的过程中的顺序是怎么样的呀,看执行情况好像是linux是从低bit位开始赋值,而sun却是从高bit位开始,而且只要结构体中成员的顺序发生了改变,这个值也会发生改变。不知道这个和大端、小端字节序有关系吗?还请各位高手赐教!!
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liudm_1981 2006-09-01
  • 打赏
  • 举报
回复
都是用的gcc进行编译的。
lann64 2006-08-31
  • 打赏
  • 举报
回复
不是大小端问题,是编译器实现问题。LZ在两个系统下分别用什么编译器?
tailzhou 2006-08-31
  • 打赏
  • 举报
回复
不是大小断的问题吧?

对位域,标准c就没有定义存储是从字节的底位还是高位开始,位域的很多性质都是没有标准规定的.
用了位域,基本都有移植的问题;
jixingzhong 2006-08-31
  • 打赏
  • 举报
回复
恩, 可能和平台特性有关 ..

大小端序问题是需要考虑,
但是这里总共就 1 字节 ...
liudm_1981 2006-08-31
  • 打赏
  • 举报
回复
但这个结构体输出后就只有一个字节呀!
laiwusheng 2006-08-31
  • 打赏
  • 举报
回复
不同的系统大端、小端字节序不同

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧