• 关于C#数据类型之间转换的问题!


     

    关于C#数据类型之间转换的讨论

    在装箱,拆箱过程中,首先涉及到的是数据的转换。发下午几个小时,研究了C#中数据类型之间的转换涉及的一些问题,希望大家给予意见!

    1、数据类型的类名

    这里讲的数据的类名指的是: 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 个字节)

    代码如下:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    namespace TypeTest

    {

        public partial class Form1 : Form

        {

            public Form1()

            {

                InitializeComponent();

            }

            private void Form1_Load(object sender, EventArgs e)

            {

                bool bo = true;

                byte b = 9;

                char c = 'a';

                sbyte sb = 8;

                short s = 8;

                int i= 7;

                uint u = 6;

                long l = 5;

                this.textBox1.Text = "typetest";

                this.textBox1.AppendText("bool -> " + bo.GetType().FullName + ""n");

                this.textBox1.AppendText("byte -> " + b.GetType().FullName + ""n");

                this.textBox1.AppendText("char -> " + c.GetType().FullName + ""n");

                this.textBox1.AppendText("sbyte -> " + sb.GetType().FullName + ""n");

                this.textBox1.AppendText("short -> " +s.GetType().FullName + ""n");

                this.textBox1.AppendText("int -> " + i.GetType().FullName + ""n");

                this.textBox1.AppendText("uint -> " +u.GetType().FullName + ""n");

                this.textBox1.AppendText("long -> " +l.GetType().FullName + ""n");

                //其实类型就不写上,自己可以真接加上去!

            }

        }

    }

    结果可看到:

    typetestbool -> System.Boolean

    byte -> System.Byte

    char -> System.Char

    sbyte -> System.SByte

    short -> System.Int16

    int -> System.Int32

    uint -> System.UInt32

    long -> System.Int64

    //

    说明,以后所编的代码都是写在private void Form1_Load(object sender, EventArgs e)中的

    2、Value Type间的转换。

    bool bo = true;

                byte b = 9;

                char c = 'a';

                sbyte sb = 8;

                short s = 8;

                int i = 7;

                uint u = 6;

                long l = 5;

                this.textBox1.Text = "datatype";

                this.textBox1.AppendText("bool bo=" + bo.ToString() + ""n");

                this.textBox1.AppendText("byte b= " + b.ToString() + ""n");

                this.textBox1.AppendText("char c= " + c.ToString() + ""n");

                this.textBox1.AppendText("sbyte sb= " + sb.ToString() + ""n");

                this.textBox1.AppendText("short s= " + s.ToString() + ""n");

                this.textBox1.AppendText("int i= " + i.ToString() + ""n");

                this.textBox1.AppendText("uint u=" + u.ToString() + ""n");

            this.textBox1.AppendText("long l= " + l.ToString() + ""n");

    此段代码并没有转换数据类型,只说明它们的类型公别还是System.bool型…System.long型。

    追加一行:int g = 1;
    short h = g;
    this.textBox1.AppendText("h = " + h.ToString() + ""n");

    结果编译报错:
      G:"Projects"Visual C#"Convert"Form1.cs(118): 无法将类型“int”隐式转换为“short”
    数据要进行强制转换。

    如上例修改如下:

    short g = 1;
    byte h = (byte) g; //
    short 型的 g 的值强制转换成byte型后再赋给变量 h
    this.textBox1.AppendText("h = " + h.ToString() + ""n");

    就可以了!

    Short->byte

           short g = 265; //265 = 255 + 10
    byte h = (byte) g;
    this.textBox1.AppendText("h = " + h.ToString() + ""n");

    注意:溢出问题!

    3ASCII<->Unicode
    char ch = 'a';

                short ii = 65;

                this.textBox1.Text = "";

                this.textBox1.AppendText("The ASCII code of "'" + ch + ""' is: " + (short)ch + ""n");

                this.textBox1.AppendText("ASCII is " + ii.ToString() + ", the char is: " + (char)ii + ""n");

                char name1 = '屈';

                char name2 = '志';

                short name3 = 21195;

                this.textBox1.AppendText("The Unicode of "'" + name1 + ""' is: " + (short)name1 + ""n");

                this.textBox1.AppendText("The Unicode of "'" + name2 + ""' is: " + (short)name2+ ""n");

                this.textBox1.AppendText("Unicode is " + name3.ToString() + ", the name3 is: " + (char)name3 + ""n");
      它的运行结果是

    The ASCII code of 'a' is: 97

    ASCII is 65, the char is: A

    The Unicode of '' is: 23624

    The Unicode of '' is: 24535

    Unicode is 21195, the name3 is:

    4int<->string

    float f = 12.3f;

                string str = "258";

                this.textBox1.Text = "";

                this.textBox1.AppendText("f = " + f.ToString() + ""n");//float->string

                if (int.Parse(str) == 258) //string->int

                {

                    this.textBox1.AppendText("str convert to int successfully.");

                }

                else

                {

                    this.textBox1.AppendText("str convert to int failed.");

    5String<->char[]

    string str = "quzhixun";

                char[] chars = str.ToCharArray();//string->char[]

                this.textBox1.Text = "";

                this.textBox1.AppendText("Length of ""quzhixun"" is " + str.Length + ""n");

                this.textBox1.AppendText("Length of char array is " + chars.Length + ""n");

                this.textBox1.AppendText("char[2] = " + chars[2] + ""n");

    char[] name = { 'q', 'u', 'z', 'h', 'i', 'x', 'u','n' };

                string sname = new String(name);//char[]->string

                this.textBox1.AppendText("sname = """ + sname + """"n");

    6、tring<->byte[]

    string s = "hi,屈志勋";

                byte[] b1 = System.Text.Encoding.Default.GetBytes(s);//sting->byte[],半个英文1个字节,汉字2 个字节。

                byte[] b2 = System.Text.Encoding.Unicode.GetBytes(s); //sting->byte[],都是两个字节。

                string t1 = "", t2 = "";

                foreach (byte b in b1)

                {

                    t1 += b.ToString("") + " ";

                }

                foreach (byte b in b2)

                {

                    t2 += b.ToString("") + " ";

                }

                this.textBox1.Text = "";

                this.textBox1.AppendText("b1.Length = " + b1.Length + ""n");

                this.textBox1.AppendText(t1 + ""n");

                this.textBox1.AppendText("b2.Length = " + b2.Length + ""n");

            this.textBox1.AppendText(t2 + ""n");

    //

    byte[] b = { 65, 66, 67 };

                string s = System.Text.Encoding.ASCII.GetString(b);//byte[]->string

                this.textBox1.AppendText("The string is: " + s + ""n");

    //

    7、转换十六进制

    int a = 159357;

                this.textBox1.Text = "";

                this.textBox1.AppendText("a(10) = " + a.ToString() + ""n");

                this.textBox1.AppendText("a(16) = " + a.ToString("x6") + ""n");

           this.textBox1.AppendText("a(16) = " + a.ToString("X6") + ""n");

    8、DateTime<->long

    double doubleDate = DateTime.Now.ToOADate();//按原来的double值输出,DateTime->long

                DateTime theDate = DateTime.FromOADate(doubleDate);//从原来的的double值获得System.DateTime对象,long->DateTime

                this.textBox1.Text = "";

                this.textBox1.AppendText("Double value of now: " + doubleDate.ToString() + ""n");

           this.textBox1.AppendText("DateTime from double value: " + theDate.ToString() + ""n");

    //

    9、form DateTime

    DateTime now = DateTime.Now;

                string format;

                this.textBox1.Text = "";

                format = """year"":yyyy,""month"":MM,""day"":dd HH:mm:ss";

                this.textBox1.AppendText(format + ": " + now.ToString(format) + ""n");

                format = "yy年M日d日";

           this.textBox1.AppendText(format + ": " + now.ToString(format) + ""n");

  • 相关阅读:
    JAVA单例模式的实现伪代码
    Oracle提高SQL查询效率where语句条件的先后次序
    JAVA源文件中可以包含多个类
    Java 内部类、成员类、局部类、匿名类等
    下面那个情况可以终止当前线程的运行
    Java推断文本文件编码格式以及读取
    C/C++ 图像二进制存储与读取
    多路分发
    jQuery Mobile页面跳转切换的几种方式
    单机 &amp; 弱联网手游 防破解、金币改动 简单措施
  • 原文地址:https://www.cnblogs.com/qunews/p/913566.html
Copyright © 2020-2023  润新知