社区
C#
帖子详情
一个byte怎么转成网络字节序
chen_chen1212
2009-11-11 01:23:55
一个byte怎么转成网络字节序
...全文
459
27
打赏
收藏
一个byte怎么转成网络字节序
一个byte怎么转成网络字节序
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chen_chen1212
2009-11-11
打赏
举报
回复
搞定了,谢谢大家
soaringbird
2009-11-11
打赏
举报
回复
[Quote=引用 24 楼 chen_chen1212 的回复:]
这个转换后byte[] btType = BitConverter.GetBytes(stcl.nType); 长度编程2了
[/Quote]
nType是什么类型?
soaringbird
2009-11-11
打赏
举报
回复
应该可以
chen_chen1212
2009-11-11
打赏
举报
回复
这个转换后byte[] btType = BitConverter.GetBytes(stcl.nType); 长度编程2了
jiezi316
2009-11-11
打赏
举报
回复
差不多吧
字符转BYTE数组用 Encoding.Default.GetBytes
chen_chen1212
2009-11-11
打赏
举报
回复
我先转成网络字节序赋值给结构体
byte[] btLen = BitConverter.GetBytes(stcl.nLen);//int long 转byte
byte[] btType = BitConverter.GetBytes(stcl.nType);
byte[] btPVersion = BitConverter.GetBytes(stcl.nPVersion);
byte[] btSocketFd = BitConverter.GetBytes(stcl.nSocketFd);
byte[] btPriority = BitConverter.GetBytes(stcl.bPriority);
//byte[] bSendData = new byte[14];
ArrayList arrTemp = new ArrayList();
arrTemp.AddRange(btLen);
arrTemp.AddRange(btType);
arrTemp.AddRange(btPVersion);
arrTemp.AddRange(btSocketFd);
arrTemp.AddRange(btPriority);
byte[] bSendData = (byte[])arrTemp.ToArray(typeof(byte));
这样对不?
soaringbird
2009-11-11
打赏
举报
回复
比如说,协议规定0,1,2,3字节是nLen,网络字节序,
那就
byte[]buf=new byte[](xxx);
Array.Copy(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(nLen)),0,buf,0,4)
以此类推
chen_chen1212
2009-11-11
打赏
举报
回复
给写写呗,怎么填啊
soaringbird
2009-11-11
打赏
举报
回复
嗯,按照协议规定,一个字段一个字段填充
chen_chen1212
2009-11-11
打赏
举报
回复
[Quote=引用 17 楼 soaringbird 的回复:]
上面代码有误,稍等。
字节对齐是在结构定义时指定的。
[/Quote]
不能强制对齐,我需要一个一个考进去吧
soaringbird
2009-11-11
打赏
举报
回复
上面代码有误,稍等。
字节对齐是在结构定义时指定的。
chen_chen1212
2009-11-11
打赏
举报
回复
要自己转成byte的,怎么转啊,我的结构里面有int,有byte,还要防止字节对齐,怎么弄啊
jiezi316
2009-11-11
打赏
举报
回复
貌似数字才转吧。其实也可以不转。转不转关键看你的另一端的情况。
soaringbird
2009-11-11
打赏
举报
回复
如果那个结构是别人写好的,你不能改,那就只能一个字段一个字段处理字节序了。
soaringbird
2009-11-11
打赏
举报
回复
结构定义成这样的,因为你的协议规定了用网络字节序,跟x86的不一样。
struct stClientHead
{
private int _nLen;
public int nLen
{
get{return IPAddress.HostToNetworkOrder(_nLen);}获取时再转回来。
set{_nLen=IPAddress.HostToNetworkOrder(value);} 赋值时转一下
}
fixed(stClientHead *pstcl=&stcl)
{
byte*pb=(byte*)pstcl;
return *pb;
......
*pb就是byte[],你可以把它发送出去。
烈火蜓蜻
2009-11-11
打赏
举报
回复
[Quote=引用 8 楼 soaringbird 的回复:]
源数据是多字节的(比如int32)才需要转,单纯的字节数组不需要。
其实,转不转要看双方是否一致,一致的话就不用转了
[/Quote]
同意
当存在某个多字节数据的时候,低字节数据在前,高字节在后,而我们正常的数据高位前,低在后,所以才存在要转换的情况,双方可以约定不转。
chen_chen1212
2009-11-11
打赏
举报
回复
不懂啊,copyto不行吗,开辟空间用这个拷贝进去?
soaringbird
2009-11-11
打赏
举报
回复
fixed(stClientHead *pstcl=&stcl)
{
byte*pb=(byte*)pstcl;
return *pb;
......
struct stClientHead
{
private int _nLen;
public int nLen
{
get{return IPAddress.HostToNetworkOrder(_nLen);}
set{_nLen=IPAddress.HostToNetworkOrder(value);}
}
chen_chen1212
2009-11-11
打赏
举报
回复
那边要求发过去是网络字节序,
stClientHead stcl = new stClientHead();
stcl.nLen = 0;
stcl.nType = setbyte;
stcl.nPVersion = 0;
stcl.nSocketFd = 0;
放到一个数组里啊??
soaringbird
2009-11-11
打赏
举报
回复
源数据是多字节的(比如int32)才需要转,单纯的字节数组不需要。
其实,转不转要看双方是否一致,一致的话就不用转了
加载更多回复(7)
主机
字节序
转
网络
字节序
例如,在 Intel 架构的计算机中,使用的是小端
字节序
(低位字节在前,高位字节在后),而
网络
字节序
...该函数接受
一个
16 位的主机
字节序
的端口号作为参数,返回
一个
转换为
网络
字节序
的端口号。因此,通常我们会使用。
计算机
网络
——
网络
字节序
(大端
字节序
(Big Endian)\小端
字节序
(Little Endian))
网络
字节序
网络
字节序
1、
网络
字节序
(Network
Byte
Order)和本机转换2、
字节序
转换函数
网络
字节序
1、
网络
字节序
(Network
Byte
Order)和本机转换 1、大端、小端
字节序
“大端”和”小端”表示多字节值的哪一端...
c# ——主机和
网络
字节序
的转换 +数据类型转化为
byte
数组
字节顺序是指占内存多于
一个
字节类型的数据在内存中的存放顺序,通常有两种字节顺序,根据他们所处的位置我们分别称为主机节序和
网络
字节序
。 通常我们认为
网络
字节序
为标准顺序,封包的时候,将主机
字节序
转换为...
java转
网络
字节序
_【转】
网络
字节序
与主机
字节序
最近在项目开发过程中,需要在采用JAVA作为语言的服务器与采用C++作为语言的服务器间进行通信,这就涉及到这两种语言间数据类型的转换以及
网络
字节序
与主机
字节序
的区别。该文主要说说
网络
字节序
和主机
字节序
的区别...
网络
字节序
与主机
字节序
的相互转换
1.
网络
字节序
与主机
字节序
在Linux
网络
编程中,经常碰到
网络
字节序
与主机
字节序
的相互转换。说到
网络
字节序
与主机
字节序
需要清晰了解以下几个概念。
字节序
,顾名思义,指字节在内存中存储的顺序。比如
一个
int32_t类型...
C#
110,534
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章