C#字节数组的常用解码处理方法

在某些情况下,比如说串口通信或者读取二进制的文件,通常会得到一个byte数组形式的数据。

然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字节与字节之间。

读取文件得到的情况:

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;

 

如有错误,敬请指教。

 

转载于:https://www.cnblogs.com/visionfeng/p/5622239.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值