如何把byte[] 里面的两个连续字节,转换成一个十六进制数
这个做的目的在于我想把socket 接受到的数据的某一部分提取出来.然后得到数据包的类型
如ICMP 的ping echo_reply头两个字节是 0X0000
这个做的目的在于我想把socket 接受到的数据的某一部分提取出来.然后得到数据包的类型
如ICMP 的ping echo_reply头两个字节是 0X0000
解决方案 »
- 这种东西怎么实现?帮忙做下
- 各位大哥,如何把dataset里的某行数据填充到未绑定数据源的dataGridView里呢?
- 设计员工工资类
- 怎样编程添加settings
- TextBox
- 关于reflector(打开DLL文件的软件)
- 关于多表插值的问题,请大家进来讨论一下吧
- 一個很难的问题,求助?大哥们!!!
- 并发冲突的问题
- [30分钟内绝对能学会的]_C#之ASP.NET入门教程[山东蓝鸟贵薪篇]
- 整数转换为字符型的奇怪问题,在picturebox的mouseup事件中,messabox.show((e.x-5).tostring())报错:指定的参数已超出有效值的范围。
- 关于C# 中RICHBOX 能否保存多个文件
byte[] buf=BitConverter.GetBytes(num);
for (int i = 0; i < buf.Length; i += 2)
{
MessageBox.Show("0x" + Convert.ToString(BitConverter.ToInt16(buf, i), 16));
}
或者
((ushort)buf[i+1]) << 8 + buf[i];
也就是说??????????这一段我该怎么写?
新手,对数据类型转换不是很熟悉!! byte[] buf = new Byte[5] { 0x03, 0x0b, 0x00, 0x00, 0x00 }; Int16 temp = ??????????????????; if(temp == 0x030b)
{
PingListBox.Items.Add("yes");
}
else
{
PingListBox.Items.Add("no");
}
byte[] buf = new Byte[5] { 0x03, 0x0b, 0x00, 0x00, 0x00 }; Int16 temp = BitConverter.ToInt16(buf,0);
//ToInt16,衹會轉換兩個字節,所以不必擔心,另外,0是要轉換的起始索引,這裡指從0x03開始
if(temp == 0x030b)
{
PingListBox.Items.Add("yes");
}
else
{
PingListBox.Items.Add("no");
}
但是很可惜 ToUInt16的方法的确没有办法得到正确的结果,你可以马上调试一下!!!
brookmill 同时也要感谢你
但是你的方法我不是太了解,所以没有办法放到我的算法中去,很有可能也是因为内存分配的高低8位是相反的原因我希望能有人有更加简洁的方法来实现当然,我知道使用unsafe来用指针的话会很有效率,但是我希望使用C#的方法!!!
我是做嵌入式的,所以是C的思路,确实如你所说,很有效率但不象C#的方法。 byte[] buf = new Byte[5] { 0x03, 0x0b, 0x00, 0x00, 0x00 }; UInt16 temp = (UInt16)(((UInt16)buf[0] << 8) + buf[1]); if(temp == 0x030b)
{
PingListBox.Items.Add("yes");
}
else
{
PingListBox.Items.Add("no");
} 或者更容易理解的写法
UInt16 temp = (UInt16)(buf[0] * 0x100 + buf[1]);