八种基本数据类型:byte、short、int、long、float、double、boolean、char
byte
8位、有符号的以二进制补码表示的整数
min : -128(-2^7)
max: 127(2^7-1)
default: 0
对应包装类:Byte
short
16位、有符号的以二进制补码表示的整数
min : -32768(-2^15)
max: 32767(2^15 - 1)
default: 0
对应包装类:Short
int
32位、有符号的以二进制补码表示的整数
min : -2,147,483,648(-2^31)
max: 2,147,483,647(2^31 - 1)
default: 0
对应包装类:Integer
long
64位、有符号的以二进制补码表示的整数
min : -9,223,372,036,854,775,808(-2^63)
max: 9,223,372,036,854,775,807(2^63 -1)
default: 0
对应的包装类:Long
float
单精度、32位、符合IEEE 754标准的浮点数
float 在储存大型浮点数组的时候可节省内存空间
浮点数不能用来表示精确的值,如货币 要用 decimal
default: 0.0f
对应的包装类:Float
double
双精度、64位、符合IEEE 754标准的浮点数
浮点数的默认类型为double类型
double类型同样不能表示精确的值,如货币
default: 0.0d
对应的包装类:Double
char 一个字节 8位
char类型是一个单一的 16 位 Unicode 字符
最小值是 \u0000(即为0)
最大值是 \uffff(即为65,535)
char 数据类型可以储存任何字符
对应的包装类:Character
boolean
boolean数据类型表示一位的信息
只有两个取值:true 和 false
这种类型只作为一种标志来记录 true/false 情况
对应的包装类:Boolean
BitConverter.IsLittleEndian
BitConverter.IsLittleEndian
》》True 小端高端 存储数据
》》False 高端低端 存储数据
大小端转换
因Modbus协议 都是高位地位请求,发送 数据的
BitConverter.IsLittleEndian 本人电脑显示 True, 则 表示 数据存储是 地位 高位 方式存储在电脑之中的
int 300 对应的 二进制 0000 0001 0010 1100
如果用 高位 地位 方法存储
//方法1private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte[] arrSrc = BitConverter.GetBytes(val);byte[] arrDst = new byte[arrSrc.Length];arrDst[0] = arrSrc[1];arrDst[1] = arrSrc[0];return BitConverter.ToUInt16(arrDst, 0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法二private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte high = (byte)((val - val % 256) / 256); //数字减去 低8位, 得到的数字再除以256得到高8位byte low = (byte)(val % 256); //数字对256取余数, 得到低8位byte[] change1 = { high, low };return BitConverter.ToUInt16(change1,0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法三private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte[] bytes = BitConverter.GetBytes(val);Array.Reverse(bytes);return BitConverter.ToUInt16(bytes, 0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法3 private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){// 右移8位获取高字节byte highByte = (byte)(val >> 8); // &是按位与运算符(同时1则1,否则0),// 与16位,高8位是000000000, 低8位是 11111111 (是高位低位方式存储)// 16位 ,OXFF:0000000011111111 (是高位低位方式存储) byte lowByte = (byte)(val & 0xFF); byte[] bytes = { highByte, lowByte };return BitConverter.ToUInt16(bytes,0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);
字节数组转换 bool数组
private List<bool> GetBitFromByte(byte[] val ){List<bool> bits = new List<bool>();for (int i = 0; i < val.Length; i++){if (BitConverter.IsLittleEndian){for (int j = 7; j >= 0; j--){bits.Add((val[i] & 1) == 1);val[i] >>= 1;}}else{for (int j = 0; j <= 7; j++){bits.Add((val[i] & 1) == 1);val[i] >>= 1;}}}return bits;}//调用List<bool> bts = GetBitFromByte(BitConverter.GetBytes((ushort)500));