网上传送二进制数据的几种方法
一直以来,有些无线(特别是无线Modem)或者有线网络设备无法正确发送和接收某些不可打印(不可见)二进制字符, 所以需要对二进制数据做一定的编码变换, 使之成为纯文本可见字符,常见的有两种方法,一种是采用16进制编码,另外一种是采用Base64编码。
1、16进制编码
这种编码是把1个字节拆成2个字节后发送出去,在接收端再两两还原成1字节。这种编码会使长度增加一倍,编码可逆,编、解码简单速度快。
1.1 1字节拆分成2字节
假设要拆分的字节定义如下:byte Orig.
首先取得高4位的值:nHighValue=Orig << 4, 然后判断nHighValue是否在0-9之间, 若是,则nHighVa lue +=48; 否则nHighValue +=55,此时nHighValue的值将为’0’-'9’或者‘A’-'F’之一。
然后取得低4位的值, 以nLowValue表示,并按上述方法将之变成介于“0” 到“ 9” 或“A” 到“F” 之间的一个字符.
最后将上面两步所得到的字符拼接起来就形成了一个2字节可见纯文本字符串, 这就保证了只发送可见字符.
1.2 2字节还原成1字节
设要还原的字符串前2个字节定义如下: char strRecover[2]:
首先取得第一个字节的值, 以bytValue 表示, 即bytValue:=strRecover[0] , 执行bytValue &= 0x0F 取得低4位的值,左移4位:bytValue << = 4.
然后取得第二个字节的值, 以bytLowValue表示, 即bytLowValue =strRecover[1] , 执行bytLowValue &&