2012-05-03 18 views
2

我有一串字符,但我想要一個十六進制字符的字符串,通過將原始字符轉換爲整數,然後將這些整數轉換爲十六進制字符來轉換十六進制字符。我怎麼做?將字符串轉換爲十六進制字符串的C#方法是什麼?

這是我做到了在VB:

for i = 1 to len(str) 
    hex_str = hex_str + lcase(cstr(hex(asc(mid(str, i, 1))))) 
next 

現在,在C#這樣做最地道的方式是什麼?

+1

請使用類似http://converter.telerik.com/ – msarchet

+0

嘗試與該轉換器http://www.developerfusion.com/tools/convert/vb-to-csharp/ –

+1

@JonathanAllen,不,這是不是無用的問題。在提問時,OP通常應該提供一些解決問題的嘗試。如果他不這樣,他不應該在這裏問。他可能應該聘請一名C#開發人員爲他完成這項工作。 SO不是外包公司。所以我重複我的問題到OP:你有什麼嘗試:http://mattgemmell.com/2008/12/08/what-have-you-tried/ –

回答

1

我不是一個VB.NET開發人員,但有一個轉換器,我有這樣的:

for (i = 1; (i <= str.Length); i++) { 
    hex_str = (hex_str + hex(asc(str.Substring((i - 1), 1))).ToString().ToLower()); 
} 
+2

我不知道你使用了什麼轉換器,但什麼是'十六進制'和'asc'?這不會編譯。 –

+0

@TomWijsman它們是VB中的內置函數。 –

+1

這是因爲HEX和ASC是C#中沒有模擬功能的內置函數 - 轉換器可能只是內聯了這些函數。它實際上是取一個字符串,得到整數ascii碼,然後通過它的外觀返回該整數的十六進制碼。 – dash

1

試試這個:

for (var i = 1; i <= str.Length; i++) 
    { 
     hex_str = hex_str + Convert.ToString(Convert.ToString(Convert.ToInt32(str[i - 1]), 16).ToUpper()).ToLower(); 
    } 
+0

我認爲那裏有太多的轉換。 :d –

4

在C#中最簡單的方法我能想出是:

var hexStr = str.ToCharArray() 
       .Aggregate("", (current, c) 
           => current + Convert.ToInt32(c).ToString("X")); 

該第一線匝串入型char[],第二和第三線轉換的字符數組每個字符變成一個整數Int32,然後轉換爲String類型的十六進制字符。該十六進制字符通過aggregate function添加到類型StringhexStr

這裏在上面的表達式中使用的功能:

對於聚集,我使用了一個lambda expressionparameters => return value)。這是一個功能,需要currentcreturn current + Convert.ToInt32(c).ToString("X");

如果有什麼不清楚的地方,請隨時在下面的評論中提問。

相關問題