主机字节与网络字节的转换问题

catyou 2002-08-28 09:40:41
我想应用TCP/IP以网络字节传送数据,
比如
unsigned long len = 114
char bLen[4];
二进制主机字节序为
00000000|00000000|00000000|01110010
转换为网络字节为
01110010|00000000|00000000|00000000
以BYTE表示则为
bLen[0] = '';
bLen[1] = '';
bLen[2] = '';
bLen[3] = 'r';
对应的code为0的ASCII为'',表示字符串的结束,code为114的ASCII为'r',则在传输时认为传送的数据长度为空,大家有什么好的办法可以解决?
不胜感谢
...全文
51 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
catyou 2002-08-29
  • 打赏
  • 举报
回复
谢谢各位了,问题已经解决了,
其实在send发送的时候是不管是否遇到字符结束符,只是按照长度来发送的
boxban 2002-08-29
  • 打赏
  • 举报
回复
你没有把问题说清楚,能否说的更清楚一点,这样大家都可以节约时间
只有将数据流当作多字节整数时才会涉及字节序问题。
wake2000 2002-08-29
  • 打赏
  • 举报
回复
socket库中有这类函数:

主机到网络转换:
短整数:htons 长整数:htonl
网络到主机转换:
短整数:ntohs 长整数:ntohl
GZCompiler 2002-08-29
  • 打赏
  • 举报
回复
...

union
{
unsigned long l;
char cl[sizeof(unsigned long)];
}un;
un.l=114;

...

send(fd,un.cl,sizeof(un.cl),0);

...

client received :r
needn't change byte order.
gaoys1979 2002-08-29
  • 打赏
  • 举报
回复
送数据填的是长度,把内存里面的东西送出去,表象为什么类型不重要吧。
长度应该是由你自己设置的,而不是程序判断是否为null
royalier 2002-08-29
  • 打赏
  • 举报
回复
为0的时候,照样的发送呀。怎么可能认为数据长度为0呢?!!!

肯定是你的发送函数中,长度的地方赋值出错了。看看这样的都不会有问题:

char buf[1024];
memset(&buf, 0 ,sizeof(buf));
send(fd, buf, sizeof(buf), 0 );
--------------^
这个参数是不是写错了!
blh 2002-08-29
  • 打赏
  • 举报
回复
如果你是按照字节流进行传颂,应该不需要进行转换,这个转换主要用于你的ip地址和段口号
catyou 2002-08-29
  • 打赏
  • 举报
回复
在send时是以字符流来发送数据的啊
是不是必须转换成字符串才能发送,转换成short,那么怎样发送数据呢?
gaoys1979 2002-08-28
  • 打赏
  • 举报
回复
没有这个必要吧。 可以把它转换成两个short,再用系统提供的函数

69,371

社区成员

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

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