C# 常用數據類型轉換(二)

6. 各種數值類型和字節數組之間的轉換
數值類型轉換爲字節數組: System.BitConverter。該類提供了 byte[] GetBytes(…) 方法將各種數值類型轉換成字節數組。
字節數組轉換爲數值類型: ToInt32、ToInt16、ToInt64、ToUInt32、ToSignle、ToBoolean 等方法將字節數組轉換成相應的數值類型。
例子:

        static void Main(string[] args)
        {
            const string formatter = "{0,25}{1,30}{2,25}";

            double aDoubl = 0.1111111111111111111;
            float aSingl = 0.1111111111111111111F;
            long aLong = 1111111111111111111;
            int anInt = 1111111111;
            short aShort = 11111;
            char aChar = '*';
            bool aBool = true;

            Console.WriteLine(formatter, "argument", "byte array", "value");
            Console.WriteLine(formatter, "--------", "----------", "-----");

            // Convert values to Byte arrays and display them.
            Console.WriteLine(formatter, aDoubl,
                BitConverter.ToString(BitConverter.GetBytes(aDoubl)),      BitConverter.ToDouble(BitConverter.GetBytes(aDoubl),0));
            Console.WriteLine(formatter, aSingl,
                BitConverter.ToString(BitConverter.GetBytes(aSingl)), BitConverter.ToSingle(BitConverter.GetBytes(aSingl), 0));
            Console.WriteLine(formatter, aLong,
                BitConverter.ToString(BitConverter.GetBytes(aLong)), BitConverter.ToInt64(BitConverter.GetBytes(aLong), 0));
            Console.WriteLine(formatter, anInt,
                BitConverter.ToString(BitConverter.GetBytes(anInt)), BitConverter.ToInt32(BitConverter.GetBytes(anInt), 0));
            Console.WriteLine(formatter, aShort,
                BitConverter.ToString(BitConverter.GetBytes(aShort)), BitConverter.ToInt16(BitConverter.GetBytes(aShort), 0));
            Console.WriteLine(formatter, aChar,
                BitConverter.ToString(BitConverter.GetBytes(aChar)), BitConverter.ToChar(BitConverter.GetBytes(aChar), 0));
            Console.WriteLine(formatter, aBool,
                BitConverter.ToString(BitConverter.GetBytes(aBool)), BitConverter.ToBoolean(BitConverter.GetBytes(aBool), 0));

            Console.ReadLine();
        }

輸出結果:
這裏寫圖片描述

7. 轉換成十六進制
任何數據在計算機內部都是以二進制保存的,所以進制與數據的存儲無關,只與輸入輸出有關。所以,對於進制轉換,我們只關心字符串中的結果。
使用 ToString(string) 方法加一些參數,就可以將其轉換成十六進制。
這裏需要一個 string 類型的參數,這就是格式說明符。十六進制的格式說明符是 “x” 或者 “X”,使用這兩種格式說明符的區別主要在於 A-F 六個數字:”x” 代表 a-f 使用小寫字母表示,而 “X” 而表示 A-F 使用大字字母表示。
有時爲了顯示結果的整齊,我們需要控制十六進制表示的長度,如果長度不夠,用前導的 0 填補。解決這個問題,我們只需要在格式說明符“x”或者“X”後寫上表示長度的數字就行了。
例子:

        static void Main(string[] args)
        {
            int val = 182;

            Console.WriteLine("val(10) = " + val.ToString());
            Console.WriteLine("val(16) = " + val.ToString("x"));
            Console.WriteLine("val(16) = " + val.ToString("X"));
            Console.WriteLine("val(16) = " + val.ToString("x4"));
            Console.WriteLine("val(16) = " + val.ToString("X4"));

            Console.ReadLine();
        }

輸出:
val(10) = 182
val(16) = b6
val(16) = B6
val(16) = 00b6
val(16) = 00B6

十六進制數的字符串轉換成整型 需要藉助於 Parse() 方法。這裏,我需要 Parse(string, System.Globalization.NumberStyles) 方法。
第一個參數是表示十六進制數的字符串,如“AB”,“20”(表示十進制的 32) 等。
第二個參數 System.Globalization.NumberStyles 是一個枚舉類型,用來表示十六進制的枚舉值是 HexNumber。
例子:

        static void Main(string[] args)
        {
            int b = int.Parse("AB", System.Globalization.NumberStyles.HexNumber);
            Console.WriteLine("b = " + b.ToString());

            Console.ReadLine();
        }

輸出:
b = 171

8. 日期型數據和長整型數據之間的轉換
日期型數據,在 C# 中的參與運算的時候,應該也是轉換爲長整型數據來運算的。它的長整型值是自 0001 年 1 月 1 日午夜 12:00 以來所經過時間以 100 毫微秒爲間隔表示時的數字。這個數在 C# 的 DateTime 中被稱爲 Ticks(刻度)。DateTime 類型有一個名爲 Ticks 的長整型只讀屬性,就保存着這個值。
DateTime 的構造函數中也提供了相應的,從長整型數據構造 DateTime 型數據的函數:DateTime(long)。
System.DateTime 提供了 double ToOADate() 和 static DateTime FromOADate(double) 兩個函數也可以實現。
例子:

        static void Main(string[] args)
        {
            long longdate = DateTime.Now.Ticks;
            DateTime theDate = new DateTime(longdate);

            Console.WriteLine("longdate = " + longdate.ToString());
            Console.WriteLine("theDate = " + theDate.ToString());

            double doubleDate = DateTime.Now.ToOADate();
            DateTime theDate1 = DateTime.FromOADate(doubleDate);

            Console.WriteLine("doubleDate = " + doubleDate.ToString());
            Console.WriteLine("theDate1 = " + theDate1.ToString());

            Console.ReadLine();
        }

輸出:
這裏寫圖片描述

9. 格式化日期型數據
編程的過程中,通常需要將日期型數據按照一定的格式輸出,當然,輸出結果肯定是字符串。爲此,我們需要使用 System.DateTime 類的 ToString() 方法,併爲其指定格式字符串。

MSDN 中,System.Globalization.DateTimeFormatInfo 類的概述裏對模式字符串有非常詳細的說明,因此,這裏我只對常用的一些格式進行說明,首先請看下錶:

d 月中的某一天 一位數的日期沒有前導零
dd 月中的某一天 一位數的日期有一個前導零
ddd 週中某天的縮寫名稱 在 AbbreviatedDayNames 中定義
dddd 週中某天的完整名稱 在 DayNames 中定義
M 月份數字 一位數的月份沒有前導零
MM 月份數字 一位數的月份有一個前導零
MMM 月份的縮寫名稱 在 AbbreviatedMonthNames 中定義
MMMM 月份的完整名稱 在 MonthNames 中定義
y 不包含紀元的年份 如果不包含紀元的年份小於 10,則顯示不具有前導零的年份
yy 不包含紀元的年份 如果不包含紀元的年份小於 10,則顯示具有前導零的年份
yyyy 包括紀元的四位數的年份
h 12 小時制的小時 一位數的小時數沒有前導零
hh 12 小時制的小時 一位數的小時數有前導零
H 24 小時制的小時 一位數的小時數沒有前導零
HH 24 小時制的小時 一位數的小時數有前導零
m 分鐘 一位數的分鐘數沒有前導零
mm 分鐘 一位數的分鐘數有一個前導零
s 秒 一位數的秒數沒有前導零
ss 秒 一位數的秒數有一個前導零

例子:

        static void Main(string[] args)
        {
            DateTime now = DateTime.Now;

            string format = null;
            format = "yyyy-MM-dd HH:mm:ss";
            Console.WriteLine(format + ": " + now.ToString(format) + "\n");
            format = "yy年M日d日";
            Console.WriteLine(format + ": " + now.ToString(format) + "\n");

            // 去除輸出的文本信息中包含格式字符
            format = "year: yyyy, month: MM, day: dd";
            Console.WriteLine(now.ToString(format) + "\n");

            format = "/'year/': yyyy, /'month/': MM, /'day/': dd";
            Console.WriteLine(now.ToString(format).Replace("/", "") + "\n");

            Console.ReadLine();
        }

輸出:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章