最近对这个东西有点迷,因为工作中用到了数据类型之间的 转换,一时半会还是不能熟练应用,所以想着可以总结一个帖子来记录,如果以后用到了再回来查找,可能每个语言之间有些差别,这里如果有误劳烦大家评论指出。
(一)数据类型介绍
先讲一下现存的数据类型都有哪些
数据类型 | 描述 | 所占内存大小 | 最小值 | 最大值 | 默认值 |
字节byte | 8位无符号整数 | 8bits | -127 | +128 | 0 |
短整形short | 16位有符号整数类型 | 16bits | -2ⁿ15 | +2ⁿ15-1 | 0 |
整形int | 32位有符号整数类型 | 32bits | -2ⁿ31 | +2ⁿ31-1 | 0 |
长整形long | 64位有符号证书类型 | 64bits | -2ⁿ63 | +2ⁿ63-1 | 0L |
浮点型float | 32位单精度浮点型 | 32bits | IEEE754 | IEEE754 | 0.0F |
双精度浮点型double | 64位双精度浮点型 | 64bits | IEEE754 | IEEE754 | 0.0D |
字符型char | 16位Unicode字符 | 16bits | 字符可以是字母,可以是符号,可以是汉字,char类型存储的是Unicode字符。 | '\0' | |
布尔型boolean | 布尔值 | 1bits | 布尔类型不能参与运算,布尔类型不能与其他类型互转,包括强转。 | False | |
字符串类型string | 一串字符 | 用来存储字符数据,一段文字之类的 | |
数据类型的类名
这里讲的数据的类名指的是: Sytem.data.DbType对应的类型,我是这样理解的。
类名 System中相对应的类型
bool System.Boolean (布尔型,其值为 true 或者 false)
char System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
byte System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127) ushort System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535) uint System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295) ulong System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方) short System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767) int System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647) long System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方到 10 的 19 次方) float System.Single (单精度浮点型,占 4 个字节) double System.Double (双精度浮点型,占 8 个字节)
有关IEEE754可以参考,IEEE 754 标准 是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号,它规定了浮点数在计算机当中的存储方式以及算术标准等。具体可以搜索相关博客。
(二)数据类型之间的转换
数据类型之间的转换分为 两类:隐式类型转换和显式类型转换
隐式类型转换:无需程序员动手操作,自动转换
隐式转换原则:从低字节转换为高字节(容量小的数据类型转换为容量大的数据类型)
byte→short→int→long→float→double
char→int(char只能和int进行转换)
显式类型转换(强制转换):需程序员手动进行操作,但是强制转换会导致数据丢失。
比如: double k=1.999;
int num=(int)k;
这里转换后的num的值是1,而不是四舍五入得到的值
(1)万能转换方法Convert
在C#里面 Convert 几乎是 万能转换了,只要不出现异常,可以随意转换....太方便了。
Convert后面 可以点出很多东西。
.ToInt32(); //转换成32位的整数
.ToInt16(); //转换成16位的整数
.ToBoolean(); //转换成 bool 值
.ToString(); //转换成 字符串
.ToDouble(); //转换成小数
后面都有提示的,
强制转换
((类名A)对象名X) //强行将 对象X 转换成 A类 的对象
(2)byte字节型数据
Test_bool = BitConverter.ToBoolean(Test_byte, 1);
//返回由字节数组中指定位置的一个字节转换来的布尔值。
Test_int = BitConverter.ToInt32(Test_byte, 0);
//返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。
Test_float = BitConverter.ToSingle(Test_byte, 0);
//返回由字节数组中指定位置的四个字节转换来的单精度浮点数。
Test_char = BitConverter.ToChar(Test_byte, 0);
//返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。
Test_string = BitConverter.ToString(Test_byte, 0);
//将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。
(3)short 短整形数据
short i=10;
byte [] a= BitConverter.GetBytes(i);
byte m=a[0]; //低字节
byte n=a[1]; //高字节
//将一个short型数据转换成两个byte型数据
(4)int整形数据
Temp_byte = BitConverter.GetBytes(Test_int);
//以字节数组的形式返回指定的 32 位有符号整数值。
(4)long长整型数据
(5)float浮点型数据
Temp_byte = BitConverter.GetBytes(Test_float);
//以字节数组的形式返回指定的单精度浮点值。
(6)double双精度浮点型数据
Temp_byte = BitConverter.GetBytes(Test_double);
//以字节数组的形式返回指定的双精度浮点值。
(7)char字符型数据
Temp_byte = BitConverter.GetBytes(Test_char);
//以字节数组的形式返回指定的 Unicode 字符值。
(8)string字符串型数据
变量.ToString(); //最常见的转换成 字符串。
""+2514 //字符串+数字 最后会全部转换成 字符串。
Temp_byte = Encoding.Default.GetBytes(Test_string);
//在派生类中重写时,将指定的 System.String 中的所有字符编码为一个字节序列。
(9)boolean布尔型数据
Temp_byte = BitConverter.GetBytes(Test_bool);
//以字节数组的形式返回指定的布尔值。
除了布尔型数据,其他几种类型的数据在计算机内存储中的都是数值都可以相互转换。