类型转换
c#类型转换
显示类型转换
- 使用()进行显示转换
int lTemp = 0;
float fTemp = 3.14f;
//将float类型强制转换成int类型
lTemp = (int)fTemp;
使用长类型给短类型赋值时,需要进行强制类型转换,使用短类型给长类型赋值时,不需要进行强制类型转换。
- 使用方法Parse进行显示转换
int lTemp = 0;
//将数字类型的字符强制转换成int类型
lTemp = int.Parse("123");
Parse方放可以将数字类型的字符强制转换为其他类型,不过需要注意,转换的字符一定要是数字字符,否则会抛出异常。
- 使用Convert类的方放进行显示转换
int lTemp = 0;
//将数字类型的字符强制转换成int类型
lTemp = Convert.ToInt32(6.5);
Convert类中的转换方放需要注意,在将浮点数强制转化为整形时,并不是完全按照四舍五入的,如果值两个数的中间值,则会得到偶数值,比如 Convert.ToInt32(6.5)会得到6,Convert.ToInt32(7.5)会得到8
- Byte数组转成string类型
Byte[] recvByteTemp = new Byte[]{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
string str = System.Text.Encoding.ASCII.GetString(recvByteTemp);
string str = System.Text.Encoding.Default.GetString(recvByteTemp) //该语句效果和上面语句相同
经过转换后 字符串str == "0123456";
注意 System.Text.Encoding.ASCII 为 recvByteTemp的编码格式,也可以通过System.Text.Encoding.Default.GetString(recvByteTemp)来进行转化,当然还有UTF8等格式,可以根据需要自行调整。
- string类型转化为Byte数组
string str = "0123456";
Byte[] recvByteTemp = System.Text.Encoding.Default.GetBytes(str);
经过转换后 recvByteTemp == { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
注意:字符串结尾的 /0 并没有被转化到Byte数组中。
- string类型转化为16进制的string类型
//方法1
string str = "0123456\r\n";
//字符串转BYTE数组
Byte[] recvByteTemp = System.Text.Encoding.Default.GetBytes(str);
string strToHex = "";
//BYTE数组转十六进制字符串
for (int i = 0; i < recvByteTemp.Length; i++)
{
//byte转化为 格式为大写的2位16进制字符串(不够两位的会右对齐,左边补0)
strToHex += recvByteTemp[i].ToString("X2") + " ";
}
//方法2
string str = "0123456\r\n";
//字符串转BYTE数组
Byte[] recvByteTemp = System.Text.Encoding.Default.GetBytes(str);
string strToHex = "";
for (int i = 0; i < recvByteTemp.Length; i++)
{
//byte转化为 格式为大写的2位16进制字符串(不够两位的会右对齐,左边补0)
strToHex += Convert.ToString(recvByteTemp[i], 16).PadLeft(2, '0').ToUpper() + " ";
}
经过转换后 strToHex == "30 31 32 33 34 35 36 0D 0A ";
一般使用方法1即可,如果想要转化为其他进制的字符串,例如转化为10进制的字符串,方法1 recvByteTemp[i].ToString(“D”) ; 方法2 Convert.ToString(recvByteTemp[i], 10) ,当然但是如果想要对齐或者同一大小写,需要后续处理。
-
Byte数组转化为16进制的string类型
string类型转化为16进制的string类型 时是将string类型转化Byte数组,然后将Byte数组再转化为16进制的string类型,因此参考上述 string类型转化为16进制的string类型 方法即可。 -
16进制的string类型转化为Byte数组
string str = "30 31 32 33 34 35 36 0D 0A ";
//剔除空格
string strNoSpace = str.Replace(" ", "");
byte[] bytes = new byte[strNoSpace.Length / 2];
for (int i = 0; i < strNoSpace.Length / 2; i++)
{
bytes[i] = Convert.ToByte(strNoSpace.Trim().Substring(i*2, 2), 16);
}
经过转换后 bytes == {48, 49, 50, 51, 52, 53, 54, 13, 10}
- Byte数组转化为Int32类型
byte[] bytes = new byte[] { 0x11, 0x22, 0x33, 0x44 };
int temp = BitConverter.ToInt32(bytes, 0);
经过转换后 temp = 0x44332211;
- Int32类型转化为Byte数组
int temp = 0x44332211;
byte[] bytes = BitConverter.GetBytes(temp) ;
经过转换后 bytes = { 0x11, 0x22, 0x33, 0x44 };
隐式类型转换
隐式转换规则和C语言类似,在不同数据类型的(加、减、乘、除、取余以及符号运算)运算中,不同类型数招必须转换成同 一类型的数据才能运算,算术转换原则为: 整型提升:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。 在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。