当前位置:  技术问答>linux和unix

结构体和网络字节序问题

    来源: 互联网  发布时间:2015-11-23

    本文导语:  typedef struct STag{          char a0; char aa[4]; unsigned short a1; unsigned short b;          unsigned short c; int d;          float e; double f;          char *g; int *h;  }S; linux下, 上面这个结构要通过网...

typedef struct STag{
         char a0;
char aa[4];
unsigned short a1;
unsigned short b;
         unsigned short c;
int d;
         float e;
double f;

         char *g;
int *h; 
}S;


linux下,
上面这个结构要通过网络传输出去,问如何处理结构填充空洞和网络字节序。
如果哪位 高手能写出大致的伪代码 ?

3x


|
呵呵,怎么搜的?google htonf

|
如果你的所有机器的系统都是一样的,也就是肯定没有字节序不一致的情况,可以不考虑字节序的问题(比如如果都是x86体系,就不用考虑)。否则就需要对每个结构成员调用htonl或者ntohl函数在网络字节和本地字节之间转换。

|
1.用紧凑格式的结构体定义
2.将每个非char类型的成员取出后转成网络字节序然后再发送出去
3.接收到之后将先存临时的结构体中,将所有非CHAR类型的成员转换成本地字节序

只要是一个字节以上的数据结构,都存在字节序的问题,为了简化处理,有一个笨办法,就是将每个非char类型的成员拷到临时变量中,然后再取这个变量地址,如果是PC机,也就是小端字节序,网络是大端字节序,只需操作这个内存地址,将这个内存地址中的数据按char类型调个头,就OK了,接收端在收到后就执行相反的操作,这就是人为地进行字节序转换,无论是整型,浮点型还是其它类型的转换过程都是一样

|
你可以把char和short都换成int,就可以对齐了。或者char后面加上一个char reserved[3]凑齐4字节。

|
* 如果没有对齐,在发送的时候会不会把空洞里面的数据发出去呢?
===
会。send不区分结构,只是当作字节流。

* 浮点型呢怎么办?
===
也需要转换。到网上搜一下,有转换函数库。

|
浮点数的格式虽然有IEEE标准,但不是大家都用。

    
 
 

您可能感兴趣的文章:

  • 用g++开发,怎么设置结构(struct)1字节对齐?
  • unix下,如何使得结构按1字节进行内存对齐?
  • 关于学籍管理系统B/S结构实现的结构问题
  • GCC 编译问题: 结构A中有个成员结构B??
  • 请问关于结构体的问题
  • 一个结构定义的问题!
  • 求救:关于结构体数据长度的补位问题
  • 想问问问linux的文件系统结构的问题
  • jsp实现树形结构的问题
  • 怎么样显示树结构的问题!
  • 【求助】关于page结构的一个问题!
  • 有关于X WINDOW 是C/S结构的一个问题?
  • 请教:关于c语言结构的问题!
  • 最简单的问题,linux下怎么查看某个结构体的定义。
  • 结构体数组映射到共享内存区的问题
  • 一个简单的结构体定义的问题
  • 有关timer_list结构的问题
  • 关于源代码的目录结构的问题,请指教
  • 编译代码结构问题
  • struct 结构内存对齐问题.
  • 一个时间结构的simple问题
  • 让我迷惑的结构体赋值问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <<大话数据结构>>中冒泡排序算法改进
  • 请问:在用proc方式往数据库插入数据时,我能不能定义一个结构体,它与表的每一项对应,将结构体赋好值后,再只将这个结构体插入表中,这行不行啊?
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 全局结构体变量和全局结构体指针变量
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 《arm体系结构结构与编程》书如何
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • file结构和inode结构
  • mysql 命令大全及导入导出表结构或数据
  • 《莱昂氏UNIX源代码分析》中有一种结构体声明没有结构体名
  • 强人,linux下驱动相关数据结构和usb设备数据结构之间的功能分析
  • 谁能告诉我EJB的体系结构有哪些,这些体系结构的优缺点如何,万分感谢!
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • struct __una_u16结构是什么结构.
  • GNU汇编fill填充一个数据结构使得另一个数据结构全部清零
  • 高手帮帮忙!vi中如何实现跳转到任意结构体或函数的声明处,包括系统库中声明的函数和数据结构?
  • jbuilder7里如何在project pane里显示出某个project的所有的类的结构图,就如显示source java files的结构图一样
  • 关于客户服务器结构与浏览器服务器结构编程的比较
  • 有一个win32的结构体,大伙看看能否转换成linux下的基本等价的结构体?
  • 结构的用法?
  • 我的关于BS结构的疑惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3