C#字节数组的常用解码处理方法
2017-09-18 15:42
246 查看
在某些情况下,比如说串口通信或者读取二进制的文件,通常会得到一个byte数组形式的数据。
然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字节与字节之间。
读取文件得到的情况:
1:将一个字节转换为16进制的字符表示
2:ASCII编码存储的转换(字节数组buffer的4到17为一个ASCII字符存储的时间)
3:如果某个数据存储在字节之间
如2个字节 0000|0000||0000|0000
字节0 字节1
这两个字节的前5个bit表示一个数据,再6个bit表示一个数据,后5个bit又表示一个数据
由于在C#中int为32位数据,可以存储4个字节的数据,int16可以表示2个字节,然后通过移位和位运算来处理。
如有错误,敬请指教。
然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字节与字节之间。
读取文件得到的情况:
FileInfo fi = new FileInfo(@"E:\ABC.DAT"); long len = fi.Length; FileStream fs = new FileStream(@"E:\ABC.DAT", FileMode.Open); byte[] buffer = new byte[len]; fs.Read(buffer, 0, (int)len); fs.Close();
1:将一个字节转换为16进制的字符表示
String str= Convert.ToString(buffer[i], 16); //16进制 String PrintStr = (Convert.ToString(buffer[i2], 16)).PadLeft(2, '0') + " "; //转换为2个字符长度的(不足左侧补零)
2:ASCII编码存储的转换(字节数组buffer的4到17为一个ASCII字符存储的时间)
string str_stime = Encoding.ASCII.GetString(buffer, 4, 17); DateTime stime = new DateTime(Int32.Parse(str_stime.Substring(0, 4)), Int32.Parse(str_stime.Substring(4, 2)), Int32.Parse(str_stime.Substring(6, 2)), Int32.Parse(str_stime.Substring(8, 2)), Int32.Parse(str_stime.Substring(10, 2)), Int32.Parse(str_stime.Substring(12, 2)), Int32.Parse(str_stime.Substring(14, 3)));
3:如果某个数据存储在字节之间
如2个字节 0000|0000||0000|0000
字节0 字节1
这两个字节的前5个bit表示一个数据,再6个bit表示一个数据,后5个bit又表示一个数据
由于在C#中int为32位数据,可以存储4个字节的数据,int16可以表示2个字节,然后通过移位和位运算来处理。
int16 iData = buffer[1] + (buffer[0] << 8) iData1 = iDate & 0x1F; iData2 = (iDate >> 5) & 0x3F; iData2 = (iDate >> 11) & 0x1F;
如有错误,敬请指教。
相关文章推荐
- C#字节数组的常用解码处理方法
- Python常用的日期时间处理方法示例
- java常用类——java常用文件处理方法
- 数字图像处理的基本原理和常用方法
- jQuery处理图片加载失败的常用方法
- C#中字符串常用的处理方法
- Javascript图像处理―为矩阵添加常用方法
- 常用海量数据处理方法
- freemarker中list常用处理方法
- javaWeb-Servlet的继承体系和HttpServletRequest中常用的方法+HttpServletResponse对中文乱码的处理
- [转]常用iOS图片处理方法
- JAVA处理日期时间常用方法
- freemarker中list常用处理方法
- 海量数据处理常用思路和方法
- 总结-处理字符串常用方法类
- python中用try来处理程序异常的集中常用方法
- 海量数据处理常用思路和方法
- 图像处理常用插值方法总结
- OBject-C捕获异常,常用的异常处理方法
- JAVA处理日期时间常用方法