读书人

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

发布时间: 2013-07-11 15:38:46 作者: rapoo

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)
{
}
}

读书人网 >C#

热点推荐