首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# socket接收十六进制数据,求相助!

2013-07-11 
C# socket接收十六进制数据,求帮助!!本帖最后由 u011350661 于 2013-07-09 11:31:35 编辑FF FF FF 2 0 0 1

C# socket接收十六进制数据,求帮助!!
本帖最后由 u011350661 于 2013-07-09 11:31:35 编辑 FF FF FF 2 0 0 1D 3 0 1 0 0 0 0 0 0 0 0 0 40 数据大概就是这种格式,FF FF FF是开头,是一个byte[19]的数组,这个数据发送过来的时候,C#在接收的时候,单个的0会不会影响数据接收的格式??????

3个FF后,前3个字节,代表一个数据,然后是1个字节,然后是2个字节,1个字节,最后一堆就不用管了。

我在接收的时候是不是应该这么写?


while (true) {
byte[] b2 = new byte[2];                //先用3个字节来判断FF FF FF
        int r = socket1.Receive(b2,b2.Length,0);
if(r == 0){
continue ;
}
if(Encoding .ASCII .GetString (b2,0,r) != "FFFFFF"){        //如果找到3个FF  就开始找后面的17个字节
break ;
}else{
   byte[] b3 = new byte[16];
   int rs = socket1.Receive (b3,b3.Length ,0);            //这个接收会不会影响我下面写的数据转换???
if(rs == 0){
continue ;
}
   string dingwei = b3[2].ToString("X2") +  b3[1].ToString("X2") + b3[0].ToString("X2") ;        //这是开始的前3个
   string speed = b3[3].ToString("X2");                            
   string angle = b3[5].ToString("X2")+ b3[4].ToString("X2");
   string fx = b3[6].ToString("X2");
}




我这样写可以得到数据中的十六进制数据吗??????求大神帮我看一下 谢谢了!~!!

socket 16进制
[解决办法]
自己调试下试试
[解决办法]
用流来接收吧
[解决办法]
要看你接受的是什么,如果是F字符,你可以判断是否等于FFFFF,但如果接受的是二进制数据流F和字符F就完全是两回事了
------解决方案--------------------



 if (b2[0]==0xFF&&b2[1]==0xFF&&b2[2]==0xFF) {        //如果找到3个FF  就开始找后面的!16!个字节

单个的0会不会影响数据接收的格式??????  : 不会

b2 包含着  b3的数据,

  这边改下
  

b3 = new byte[16];
 Buffer.BlockCopy(b2, 3, b3, 0, 16);
byte[] 

 你这方法写的比较丑。
[解决办法]
直接用数字0xFFFFFF判断就好了,别用Encoding .ASCII .GetString去转
[解决办法]
引用:
Quote: 引用:


 if (b2[0]==0xFF&&b2[1]==0xFF&&b2[2]==0xFF) {        //如果找到3个FF  就开始找后面的!16!个字节

单个的0会不会影响数据接收的格式??????  : 不会

b2 包含着  b3的数据,

  这边改下
  

b3 = new byte[16];
 Buffer.BlockCopy(b2, 3, b3, 0, 16);
byte[] 

 你这方法写的比较丑。


我要是单个引用 某一字节数据  应该怎么取出来啊??????


以这段数据流为例
FF FF FF 2 0 0 1D 3 0 1 0 0 0 0 0 0 0 0 0 40 
b2[0]就是第一个 FF
b2[18]就是最后一个  40(16进制,十进制的话就是4*16=64)
都说是字节数组了,当然是数组形式了。
只不过FF  1D这些都是16进制的数,0x1D代表10进制的29.
  Receive方法是接受当前Scoket连接中 传递过来的数据流。
    
[解决办法]
接收的不可能是十六进制数,要么是字节,要么是16进制字符串,楼主概念还不清楚。
字节的可能性大些,接收时最好一次性全部接收,再处理。
byte[] buffer = new byte[19];
int len = 0;
while (true)
{
    int r = socket1.Receive(buffer, len, buffer.Length - len, 0);
    if (r == 0) break; // 断线
    len += r;
    if (len < 19) continue; // 数据不足继续收
    if (buffer[0] == 0xff && buffer[1] == 0xff && buffer[2] == 0xff)
    {
    }
}

热点排行