八种基本数据类型: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
如果用 高位 地位 方法存储
//方法1
private 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));