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;

如有错误,敬请指教。

时间: 2025-01-02 08:42:14

C#字节数组的常用解码处理方法的相关文章

PHP中数组遍历常用几种方法

在编码的过程中,对指定的数组进行遍历是再常见不过的事了.在遍历的过程中,很多的语言都是利用for循环进行遍历,方便快捷.但是PHP中,对于数组的下标与有些语言不同.PHP中数组的下标可以为字符串,也可以字符串和数字混合,也就是所谓的关联数组.如果下标是纯数字的话,那就是索引数组了. 1.for() for()进行遍历时,有个局限,如果是关联数组的话,就不能根据下标的递增来遍历了,突然冒出了字符串的话,肯定会报错.所以在PHP中,for()能使用的范围也就是索引数组了. <?php     $ar

数组中常用算法(方法)总结

1.堆栈 注意堆栈中的node需要暂存哪些数据,以及入口. 举例:二维数组中找到用相邻字母组成的目标字符串. Given board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] word = "ABCCED", -> returns true,word = "SEE", -> returns true,word = "ABCB", -> return

java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等

原文:java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等 源代码下载:http://www.zuidaima.com/share/1550463397366784.htm ava 常用流处理工具 StreamTool ,常见的InputStream 流转字符串, 转字节数组等等 **应用场景: ** 1. 文件上传 2. js / css / img 等文件读取输出. 转字符串输出 (js & css) , 转字节数组输出 (img .. swf

BitConverter.GetBytes 方法以什么顺序返回字节数组

测试程序 那么,我们写个程序来测试一下吧.下面就是 BitConverterTester.cs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 using System; namespace Skyiv.Tester {   static class BitConverterTester   {     static void Main()     {       Console.WriteLine("      OS Version: " 

js数组对象以及数组常用属性和方法

定义形式: var  arr1 = new Array(1,  5,  8,  7,  2,  10);  //定义了一个数组,其中具有6个数据 var  arr2 = new Array();                   //只是单纯地定义了一个数组(名),但没有给值(数据),即现在是空的 var  arr3 = [1,  5,  8,  7,  2,  10];  //同arr1,只是一种简写的定义法. var  arr4 = [ ];                  //同arr

字符串到字节数组和字节数组到字符串的转换(编码和解码问题)

/* * String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组 * byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组 * * 编码:把看得懂的变成看不懂的 * String -- byte[] * * 解码:把看不懂的变成看得懂的 * byte[] -- String * * 举例:谍战片(发电报,接电报) * * 码表:小本子 *         字符    数值 * *

javascript数组常用的遍历方法

本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.map.filter.find.every.some.reduce,它们有个共同点:不会改变原始数组. 一.forEach:遍历数组 1 2 3 4 5 var colors = ["red","blue","green"]; // ES5遍历数组方法

Java 把指定路径的文件读入内存并用字节数组保存工具方法

/** * * @param path 文件路径 * @return 文件转成字节数组 */ public static byte[] getByteArrayFrom(String path){ byte[] result=null; ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); //创建文件 File file=new File(path); FileInputStream fileInputStream=nu

细说数组常用遍历的方法

前言 本文主要介绍数组常见遍历方法:forEach.map.filter.find.every.some.reduce,它们有个共同点:不会改变原始数组. 一.forEach:遍历数组 var colors = ["red","blue","green"]; // ES5遍历数组方法 for(var i = 0; i < colors.length; i++){ console.log(colors[i]);//red blue green