c#中各種數據類型的轉化

c#中Convert中沒有ToFloat()方法。

將string轉化成float可以採用下面的方法 float.Parse()方法,相應的int.Parse()方法。

float  ratio = score / point * 100;

ratio.ToString("f1");

可以使用上面的方法將float轉化成帶一位小數的字符串

以下文章轉自:http://blog.csdn.net/best_02/archive/2007/08/31/1766737.aspx

作者郵箱:[email protected]

對於初學者來說,在編寫c#程序時最頭痛的就是要進行各種數據類型的轉換,

由於對.net開發環境的不熟悉以及系統提供的API的不瞭解,在處理程序時佔用

了很長的時間,筆者雖然做c#的開發時間不長,但對數據之間的轉化也有了一

定的心得,現在共享出來希望對大家能有所幫助。

1.int型轉化爲string
int i;//i可根據自己的需要進行初始化
string a = i.ToString();

2.string轉化爲byte[]

方法1:
string t;//要轉化的字符串
char[] m = t.ToCharArray();
byte[] n = new byte[m.Length];//轉化的結果數組
for ( i = 0; i < m.Length; i++)
{
   n[i] = (byte)m[i];
}

方法2:
利用系統提供的函數
string str;
Byte[] bt = System.Text.Encoding.ASCII.GetBytes(str.ToCharArray);

3.int型轉化爲byte[]

方法1:
int i;
byte[] temp = new byte[4];
int pos;
for (pos = 0; pos < 4; pos++)
{
temp[pos] = (byte)(i & 0xff);
i >>= 8;
if (i == 0) break;
}

方法2:
利用系統提供的函數
int i;
byte[] tdata = new byte[4];
data = System.BitConverter.GetBytes(i);

4.byte[]轉化爲string

方法1:
byte[] tmp;
string str =new System.Text.ASCIIEncoding ().GetString (tmp );

方法2:
byte[] tmp;
string str = System.Text.Encoding.ASCII.GetString(tmp);

5.string類型轉化爲int

方法1:
string  str;
int i = Convert.ToInt32(str);

方法2:
string  str;
int i = Int32.Parse(str);

6.byte[]轉換爲int

方法1:

int res = 0; //結果
int temp = 0;
byte[] result;//可由上文得到,或自己進行初始化
for (int h = 3; h>=0; h--)
{
res<<= 8;
temp = result[h] & 0xff;
res |= temp;
}

方法2:
byte[] result;
int res = System.BitConverter.ToInt32(result,result想轉化的起始位置);

以下文章轉自:http://blog.csdn.net/bEst_02/archive/2007/09/01/1768318.aspx

 從小端大端問題剖析數據類型轉化   

在c#數據類型轉化一文中提及了由int型轉化爲byte[]的一個方法,具體的實現如下:
int i=0x12345678;
byte[] result = new byte[4];
 
for(int pos=0;pos<4;pos++)
{
    byte[pos] = (byte)(i&0xff);
    i>>=8;
}
 
在程序中我們是將整數i進行右移操作,那我們可不可以用左移操作呢?
 
首先,我們做個測試的程序來看看結果。當然要進行左移操作的話,i就不能和0xff做與運算了,不然結果就是0。我們修改後的程序如下:
 
int i=0x12345678;
byte[] result = new byte[4];
 
for(int pos=0;pos<4;pos++)
{
    byte[pos] = (byte)(i&0xff000000);
    i<<=8;
}
 
System.Console.WriteLine("{0},{1},{2},{3}",byte[0],byte[1],byte[2],byte[3]);
 
調試運行,結果如下:
0,0,0,0
我們發現運行的結果全爲0,爲什麼呢?
 
在講原理之前,我們要先了解兩個基本知識:
 
1.類型轉化時的內存操作
當我們把一個int型強制轉化爲byte時,由於byte只有1個字節,而int型是4個字節,這樣就會產生截斷,int把它最低的內存空間裏的值放到了byte所對應的內存空間裏。如圖所示:
   Byte型                     int
 **********             **********
 * 1 Byte * <-----------* 1 Byte *  低位
 **********             **********  |
                              * 1 Byte *     |
                               **********  |
                              * 1 Byte *     |
                               **********  |
                              * 1 Byte *  高位
                              **********
2.操作系統中大端序以及小端序的概念
有關於大端和小端的具體的細節我不想太多,有興趣的可以到csdn技術文擋裏搜索相關內容。下面用圖示的方法簡單介紹大端和小端。
例如:對於一個整數0x12345678它在兩種模式下在內存的存儲形式。
在小端序中的存放方式:
 **********
 *   78   * 低位
 **********  |
 *   56   *  |
 **********  |
 *   34   *  |
 **********  |
 *   12   * 高位
 **********
在大端序中的存放方式:
 **********
 *   12   * 低位
 **********  |
 *   34   *  |
 **********  |
 *   56   *  |
 **********  |
 *   78   * 高位
 **********
 
通過上面的介紹,大家應該對這個原理懂的差不多了,那我就拋磚引玉簡要說明下:
在Windows操作系統下,數據的存放是按小端序的。當數據右移時是將高位的數據移動到低位的內存裏,而左移是將低位的數據移動到高位中。而在數據類型轉化的時候是將低位的數據開始存入目的內存中的,這就是爲什麼我們得到的數據是0的原因。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章