通信协议 数据转换辅助类ProtocolHelper1
来源:互联网 发布:ie无法打开淘宝网 编辑:程序博客网 时间:2024/04/30 15:10
public static uint CalValueFromHex(Byte[] buf, int start, int len) { uint value; Byte c; int i, p; value = 0; p = start; for (i = 0; i < len; i++) { c = buf[p++]; value += (uint)(c << (8 * (len - i - 1))); } return value; } public static ulong CalUlongValueFromHex(Byte[] buf, int start, int len) { ulong value; Byte c; int i, p; value = 0; p = start; for (i = 0; i < len; i++) { c = buf[p++]; value += ((ulong)c << (8 * (len - i - 1))); } return value; } public static int GetValueUInt(Byte[] buf, int start, int len, ref uint value) { value = CalValueFromHex(buf, start, len); return len; } public static int GetValueInt(Byte[] buf, int start, int len, ref int value) { value = (int)CalValueFromHex(buf, start, len); return len; } public static int GetValueULong(Byte[] buf, int start, int len, ref ulong value) { value = CalUlongValueFromHex(buf, start, len); return len; } public static int GetValueLong(Byte[] buf, int start, int len, ref long value) { value = (long)CalUlongValueFromHex(buf, start, len); return len; } public static int GetDateTime(Byte[] buf, int start, int len, ref DateTime time) { try { int year, month, day, hour, minute, second; year = (int)CalValueFromHex(buf, start++, 1); month = (int)CalValueFromHex(buf, start++, 1); day = (int)CalValueFromHex(buf, start++, 1); hour = (int)CalValueFromHex(buf, start++, 1); minute = (int)CalValueFromHex(buf, start++, 1); second = (int)CalValueFromHex(buf, start++, 1); year += 2000; time = new DateTime(year, month, day, hour, minute, second); return 6; } catch (Exception) { time = new DateTime(2000,1,1,0,0,0); } return 6; } public static int GetUTF8String1(Byte[] buf, int start, ref string str) { int len; len = buf[start]; str = Encoding.UTF8.GetString(buf, start + 1, len); return len + 1; } public static int GetString1(Byte[] buf, int start, ref string str) { int len; len = buf[start]; str = Encoding.ASCII.GetString(buf, start + 1, len); return len + 1; } public static int GetData2(Byte[] buf, int start, ref byte[] bufOut, ref int bufOutLen) { int i; uint len; len = CalValueFromHex(buf, start, 2); bufOutLen = (int)len; for (i = 0; i < bufOutLen; i++) { bufOut[i] = buf[i + start + 2]; } return (int)len + 2; }
重点理解这句:ue += (uint)(c << (8 * (len - i - 1)));右移符号(<<)就是移n为,这该数值就增大到原来的2的n次方被
比如字节数组有[49][50][51]这三个字节,其二进制为:110001,00110010,00110011
CalValueFromHex(buf, int 0,1)是要取最高位的字节(即110001),也就是得到49,c << (8 * (len - i - 1)),1-0-1=0;移0位,所以还是49
CalValueFromHex(buf, int 0,2)是要取头两字节(即11000100110010)这个二进制的十进制数据就是49*256+50=12594,现在就可以理解c << (8 * (len - i - 1))的作用了,就是高位字节因移位变大了,右移1(取了两字节)位,最高字节得知变为原来的2的8次方倍,也就是原来的256倍,这个等价于c << (8 * (len - i - 1)),理解这个其他的也就OK了。
Ansi,UTF8,Unicode,ASCII编码的区别 ,可以看看这里http://blog.csdn.net/xiongxiao/article/details/3741731
- 通信协议 数据转换辅助类ProtocolHelper1
- 通信协议 数据写入字节数组的辅助类ProtocolHelper2
- Android常用辅助类之单位转换的辅助类
- 数据持久化辅助类
- Util:常用单位转换的辅助类
- 常用单位转换的辅助类
- 列表控件数据操作辅助类
- 数据库读取数据辅助类 DataHelperIoT
- 通信协议中的数据类型的转换
- java通信协议中各进制、字符转换
- 安卓工具类------>常用单位转换的辅助类
- Android DensityUtils-常用单位转换的辅助类
- 手机常用单位转换的辅助类 → DensityUtils
- #Anroid常用单位转换的辅助类DensityUtils
- 79-辅助数据
- 辅助类
- 辅助类
- 辅助类
- poj 1966(无向图的点连通度。。。。。最大流处理。。。)
- 我的学习笔记
- Eclipse中SVN版本控制插件的安装和使用
- 从头再来,是唯一的方法,你有勇气接受么?
- Burrows–Wheeler transform 算法
- 通信协议 数据转换辅助类ProtocolHelper1
- 机器学习大牛及其主页
- 能进行调整的文字浮雕和雕刻效果
- 推荐系统简介(一)
- 以后该怎么走啊?
- 给服务器控件应用样式
- 我的Android经历
- ISTQB AL高级认证系列03:ISTQB AL-TTA测试技术分析员学习目标
- 2011-9-22 15:41:21