C#对字节字节数组的各种操作
最近在做socket服务器,需要解析硬件的⾃定义协议,发现⾃⼰对C#的byte操作⼀窍不通,故记录下来
1、单字节byte转int
byte b1=0x1f;
int int1=b1;
//或者
var b1 = new byte[] { 0x1f, 0 ,0b00011111};
int int1= a[0];
其实byte存的是⼆进制数据,但是我们在程序中可以直接给byte赋值 2进制、10进制、16进制的数字,同理,我们从byte取出数据时,也可以直接按字节取出来,⽐如int a1=b1[0],程序会⾃动将byte转成int类型。当然此处只针对单字节取数字的做法,不同的协议会有不同的存放数据的⽅法,具体还是要看协议定义。
2、int转单字节byte
int int1 = 128;byte value1 = (byte) int1;
同理,没什么好说的。
3、字节数组转int(两个字节以上)
⽐如现在有⼀个协议,⽤两个字节存⼀个int数字,那么我们可以⽤BitConverter类进⾏转换。
此⽰例初始化字节数组,并在计算机体系结构为 little-endian(即⾸先存储最低有效字节)的情况下反转数组,然后调⽤⽅法以将数组中的四个字节转换为
byte[] bytes = { 0, 0, 0, 25 };
// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt16(bytes, 0); // 第⼆个参数表⽰开始位置
Console.WriteLine("int: {0}", i);
// Output: int: 25
BitConverter类提供了字节数组和基数据类型的相互转换,使⽤过程中要注意计算机构的⼤⼩端
具体请查看微软官⽅⽂档:
3、字节数组转字符串具体编码还是要看具体环境⽽⾔
byte[] bytes = { 66,83 };
Encoding.UTF8.GetString(bytes);
//使⽤GB2312需要先在主程序⼊⼝注册 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding.GetEncoding("GB2312").GetString(bytes);
4、字符串转字节数组
Encoding.UTF8.GetBytes("it is a string");
字符串数组怎么转成byteEncoding.GetEncoding("GB2312").GetBytes("it is a string");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。