首页 > 编程知识 正文

java string转byte数组,bytebuffer转byte数组

时间:2023-05-06 19:08:55 阅读:16718 作者:4723

其实以前没有接触这些内容的时候,脸是无知的表情,完全不知道区别和是为了做什么。

其实,用简单的语言来说,接收数据的异或检查相当于解码,发送时的奇偶校验位相当于加密;

在官方解释中,其它数据信息传输通常在数据帧中加载异或奇偶校验比特以确保数据传输准确可靠。 (个人而言,由于传输过程中数据可能会丢失并损坏,因此勾选复选框以保证数据的正确性() ) ) ) ) ) ) 652 )

言归正传,java如何检查异或

1、发送数据

byte[] rece=new byte[6]; rece[0]=0x55; rece[1]=0x01; rece[2]=(byte )0xA1; rece[3]=0x5F; rece[4]=0x00; rece[5]=(byte ) ) rece [0] ^ rece [1] ^ rece [2] ^ rece [3] ^ rece [4]; 例如,假设存在字节数组,其中第五位是奇偶校验位,则奇偶校验位的数目是前一位数据的异或,即:

rece[5]=(byte ) ) rece [0] ^ rece [1] ^ rece [2] ^ rece [3] ^ rece [4]; 所计算出的奇偶校验比特是AA,能够在获得奇偶校验比特之后执行命令发送操作;

2、解析数据

例如,我们收到了一个具有以下数据的byte数组:

rece[0]=0x55; rece[1]=0x01; rece[2]=(byte )0xA2; rece[3]=0x00; rece[4]=0x00; rece[5]=0xF6此时如何确定数据是否准确? 用异或检查吗

int error=rece[5]; for(intI=0; i5; I({error=error^rece[I]; }返回错误==0;还是以rece[5]为校验位举例:当校验位与前面所有数据进行异或,最后得到的异或值=0时,表示数据是有效的。如果出现了其他情况,那么就需要排除一下了。

附几个byte数据操作常用的方法

/**16十六进制字符串转换byte数组* /公共静态字节[ ] hexstringtobytearray (string digits (strings=digits.length ) %2? '0' digits : digits; bytearrayoutputstreambaos=newbytearrayoutputstream (; for(intI=0; i s.length (; i =2) charC1=s.charat(I ); if () I1 )=s.length ) ) thrownewillegalargumentexception (' hex util.odd ' ); (charC2=s.charat ) I1; 字节b=0; if () c1='9' ) c1='9' ) (b=) )-'0' ) 16 ); elseif () c1='f ' ) ) c1='f ' ) ) b=) () C1-'a'10 ) * 16 ); elseif () c1='F ' ) ) c1='F ' ) ) b=) () C1-'a'10 ) * 16 ); elsethrownewillegalargumentexception (hex util.bad ); if () c2='9' ) c2='9' ) b=) c2='9' ); ELSEif () c2='f ' ) ) c2='f ' ) ) B=) C2-'a'10 ); ELSEif () c2='F ' ) ) c2='F ' ) ) B=) C2-'a'10 ); elsethrownewillegalargumentexception (hex util.bad ); BOS.write(b; }返回(baos.to bytearray ) ); }/** byte数组是十六进制字符串*/publicstaticstringbytearraytohexstr (byte bytes [ ] (string buffer sb=new string buffer ) bytes.lener i bytes.length; I ) sb.append(digittohexchar ) (bytes[I]4) ); sb.append(digittohexchar ) (bytes[I]0x0f ) ); }返回(sb.tostring ) ); }私有身份验证工具(intvalue ) { value=value0x0f; if(value=10 ) (返回) (char ) (value - 10 'A ' ) ); }else{return((char ) ) value '0) ); } } 一些进制转换方法

/** * 16将十六进制字符串转换为十进制* @ param hexs * @ return */publicstaticintdecodehex (string hexs ) bigintegerbigint=newbiginteger ) int numb=bigint.intValue (; 返回编号; }/** * 10将十进制数转换为十六进制字符串中的一位时0 * @ paramn * @ return */privatestringgetnum (integern ) string number=integer.to hex sttter }返回编号; }/** * 10将十进制转换为十六进制字符串* @ param numb * @ return */publicstaticstringencodehex (integer numb ) string hex=integer.tohexsstrd }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。