C语言,不能用强制转换,想将结构体内所有元素转化为unsigned short int型元素

fishgoat1 2007-07-31 11:11:05
typedef struct userinfo
{
char[10] username; //用户姓名
long user_serial; //用户标示号
float user_fee; //用户消费额,两位小数
} a;

1. 一个char是按8位存放的,能不能2个char拼成1个unsigned short int来存放?
2. 一个long是32位的,能不能拆成2个unsigned short int?如何拆呢?
3. 一个float是32位的,而且是有精度要求的,能不能拆成2个unsigned short int存放呢?如何拆呢?

如果在转化完成后,能不能再转化回来呢?




...全文
442 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gugou 2008-06-16
  • 打赏
  • 举报
回复
应该不能用union的吧,用union不能同时操作的吧


用指针强制转换应该可以实现
LostKingGK 2007-08-10
  • 打赏
  • 举报
回复
用union?
struct userinfo
{
union
{ //用户姓名
char username_b[10];
unsigned short username_us[5];
};
union
{ //用户标示号
long user_serial_l;
unsigned short user_serial_us[2];
};
union
{//用户消费额,两位小数
float user_fee_f;
unsigned short user_fee_us[2];
};
}a;
HKCID 2007-08-06
  • 打赏
  • 举报
回复
除了第3条不好处理外都可以用共同体,干吗用结构体呢?
bigbee 2007-08-01
  • 打赏
  • 举报
回复
ls说的不错.
lbing7 2007-08-01
  • 打赏
  • 举报
回复
LZ如果以再底层一点的思考方式,
every is byte!!

不关注数据类型的表现形态,仅仅看它的字长,那么,进行转换的时候,数据类型之间的转换,要注意的就是它们字节顺序...

看一下你的芯片的体系结构和C编译器的说明,这就可以很快解决了..
runninglover 2007-08-01
  • 打赏
  • 举报
回复
底层的操作基本上都是按照比特传输,也就是说你无需关注字节之间的转换,传输到另外的终端定义类似的结构体,接收数据就可以。

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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