1.字符串类型浮点数转float类型
string strNumber = "71.068";
float floatNumber =float.Parse(strNumber); //输出floatNumber =71.068
2.浮点数转4个字节(float类型),double默认转8个字节
float floatNumber = 71.068f;
byte[] result = BitConverter.GetBytes(floatNumber);//float浮点数默认转为4个字节,double默认转8个字节
//输出结果:D1 22 8E 42
Array.Reverse(result); //数组元素翻转 42 8E 22 D1
3.int转4个字节 ,short默认转2个字节
byte[] result2 = BitConverter.GetBytes((int)23.5); //将23.5转为int即23 将整形转为字节
Array.Reverse(result2); //输出结果 00 00 00 17
4. list集合转数组(一维)
List<byte> listBytes1 = new List<byte>();
listBytes1.Add(0x01);
listBytes1.Add(0x02);
listBytes1.Add(0x03);
byte[] result3 = listBytes1.ToArray(); //result3存放的为0x01,0x02,0x03
5.list集合转数组(二维)
List<byte[]> listBytes1 = new List<byte[]>();
float floatNumber = 71.068f;
byte[] result = BitConverter.GetBytes(floatNumber);//float浮点数默认转为4个字节,double默认转8个字节
//输出结果:D1 22 8E 42
Array.Reverse(result); //数组元素翻转 42 8E 22 D1
listBytes1.Add(result); //添加到集合中去
byte[] result2 = BitConverter.GetBytes((int)23.5);
Array.Reverse(result2); //输出结果 00 00 00 17
listBytes1.Add(result2); //添加到集合中去
byte[] result3 = listBytes1.ToArray(); //编译报错,无法转换,因为listBytes1存放着为二维数组
byte[] result3 = listBytes1.SelectMany(bytes => bytes).ToArray();//正确转换方式 集合转数组
//输出结果:42 8E 22 D1 00 00 00 17
6.字节数组16进制显示(原样显示)
byte[] bytes=new byte[] {0x01,0x03,0xa5,0xbb };
MessageBox.Show($"字节数组十六进制显示为:{bytes[0].ToString("X2")}-{bytes[1].ToString("X2")}-{bytes[2].ToString("X2")}-{bytes[3].ToString("X2")}?");
//X2表示以16进制显示,并且保留两位,只写X,只保留有效为,比如01,输出为1
输出结果为:01-03-A5-bb
6.字节数组10进制显示
byte[] bytes=new byte[] { 0x01, 0x03, 0xa5, 0xbb };
MessageBox.Show($"字节数组十六进制显示为:{bytes[0]}-{bytes[1]}-{bytes[2]}-{bytes[3]}");
// 输出结果为: 1-3-165-187
7.字节数组翻转
byte[] bytes=new byte[] { 0x01, 0x03, 0xa5, 0xbb };
Array.Reverse(bytes); //数组元素翻转
MessageBox.Show($"字节数组十六进制显示为:{bytes[0].ToString("X2")}-{bytes[1].ToString("X2")}-{bytes[2].ToString("X2")}-{bytes[3].ToString("X2")}");
//输出结果为:bb-a5-03-01
8.将一个整形数据存储到4个字节中,按照由高到低位存储,以及逆运算。
//将32位整形数据转为字节,按照高低位存储
int base_add = 123456789; //整形数据
byte[] bytes = new byte[4];
bytes[0] = (byte)((base_add >> 24) & 0xFF); //最高位
bytes[1] = (byte)((base_add >> 16) & 0xFF); //次高位
bytes[2] = (byte)((base_add >> 8) & 0xFF); //次低位
bytes[3] = (byte)(base_add & 0xFF); //最低位
//逆运算 将字节从高位到低位转为32位整形数据
int base_add = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
9.10进制字节数组转为16进制字节数组
byte[] data = { 21, 22, 23, 24, 25, 26, 27, 28 }; //10进制字节数组
string[] hexArray = new string[data.Length];
for (int i = 0; i < data.Length; i++) //先将10进制字节数组转为字符串
{
hexArray[i] = data[i].ToString("X2");
}
byte[] hexBytes = new byte[hexArray.Length];
for (int i = 0; i < hexArray.Length; i++) //再将字符串转为16进制
{
hexBytes[i] = Convert.ToByte(hexArray[i], 16);
}
MessageBox.Show(BitConverter.ToString(hexBytes));
//打印输出:15 16 17 18 19 20 21 22
10.任意类型数组删除任意长度的元素
byte[] result = { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 }; //模拟数组
for (int i = 0; i < 4; i++) //判断该字节数组前四位元素是否等于特定字符0x80
{
if (result[0] != 0x80)
{
result = result.Skip(1).ToArray(); //不等于特定字符,将原数组长度前4个元素依次删除
// Skip(1)表示每次删除1个元素,可以一次删除多个
}
else
{
break;
}
}
//最终输出结果为:result=0x25,0x26,0x27,0x28
11.16进制数据转10进制
Int16 i16 = Convert.ToInt16("F74B", 16); //结果为-2229 16位
Int32 i32 = Convert.ToInt32("F74B", 16); //结果为63307 32位
//将F74B十六进制数据转为10进制
12.两个字节转为10进制有符号数
byte1[0] = 0x02;
byte1[1] = 0x87;
Array.Reverse(byte1); //根据实际情况调整
short result1 = BitConverter.ToInt16(byte1, 0); // 将字节数组转换为有符号整数
13.将一个字节取出低四位,再拼接一个字节 一共12位,转换为10进制(此方法可扩展)
int result3 = (tempArray[4] & 0x0F) << 4 | tempArray[5];