以下紀錄了一些C#基本的換算方法...
像以下我要轉換一個十進制數值變成一個16進制顯示的字串,可以用以下方法
int test1 = 10; //我們用一個10進制的數值10來做測試
string result1 = Convert.ToString(test1 , 16);
string result2 = test1.ToString("x2");
MessageBox.Show(result1); //顯示:a
MessageBox.Show(result2); //顯示:0a
以上兩種方式都可以轉換出我們要的結果但差別在於是,第一種Convert.ToString()的輸出結果如果數值前面開頭是0,就不會顯示出來了
而第二種.ToString()方式能夠自行控制要補滿幾位數,如果你要補滿6位數,就把x2改成x6就可以了
如果要把16進制字串轉成10進制數值的話,則這樣寫
string testHex = "1A"; //要轉換的16進制字串
byte resultByte = Convert.ToByte(testHex , 16); //轉換成byte,其中的16表示來源字串是16進制格式
MessageBox.Show(resultByte.ToString()); //顯示:26
如果今天是一連串多個的10進制的數值要轉成16進制的字串的話,一般最傳統的方式就是使用一個迴圈下去一個個轉換,寫法感覺不是很乾淨俐落,
大概會這樣寫
第一個參數是要傳入你想要轉換的一維陣列
第二個參數要傳入方法委派,實做轉換的動作(參考我上面的寫法)
在上面的例子中我使用了黏巴達的寫法(Lambda Expression),直接帶入到第二個參數中,看起來更簡潔
byte[] testByteArray = new byte[]{1, 10, 100, 255, 43 };
string[] resulArray = new string[5];
for(int x=0; x<5; x++)
{
resulArray[x] = testByteArray[x].ToString("x2");
}
MessageBox.Show(String.Join(" ", resulArray)); //顯示:01 0a 64 ff 2b
這時我們可以用.net提供的一個方法:Array.ConvertAll<TInput, TOutput>byte[] testByteArray = new byte[] { 1, 10, 100, 255, 43 };
string[] resulArray = Array.ConvertAll(testByteArray, (arg) => { return arg.ToString("x2"); });
MessageBox.Show(String.Join(" ", resulArray)); //顯示:01 0a 64 ff 2b
這是一個位於Array類別底下的一個靜態方法,此方法供需要傳入兩個參數第一個參數是要傳入你想要轉換的一維陣列
第二個參數要傳入方法委派,實做轉換的動作(參考我上面的寫法)
在上面的例子中我使用了黏巴達的寫法(Lambda Expression),直接帶入到第二個參數中,看起來更簡潔
沒有留言:
張貼留言