2010-11-16 229 views
4

所以,我有一個13個字符的字符串。C#將字符串轉換爲uint

string str = "HELLOWORLDZZZ"; 

我需要將它作爲ASCII表示(十六進制)存儲在uint變量中。我該怎麼做呢?

+2

注意:這原始的字符串是不是十六進制 – 2010-11-16 21:06:02

+0

你是什麼意思是不是十六進制ASCII ...表示是一個字符串,順便說一句.. – 2010-11-16 21:06:55

+0

見我的編輯新字符串 – 2010-11-16 21:07:27

回答

10

您可以使用Encoding.ASCII.GetBytes到您的字符串轉換爲byte陣列ASCII編碼(每個字符取一個byte)。然後,調用BitConverter.ToUInt32將該字節數組轉換爲uint。但是,由於@ R. Bemrose在評論中指出,uint只有4 byte s,因此您需要先對陣列進行一些分區。

+0

uint如何代表4個字節的字符串? 「ABCD」如何得到代表? – 2010-11-16 21:19:26

+1

@whydna,[7位ASCII表](http://www.neurophys.wisc.edu/comp/docs/ascii/)用於在位表示和字符之間進行轉換。因此,「ABCD」變成了「01000001 01000010 01000011 01000100」,其中十進制是「1094861636」,即「uint」將包含的值。 – jball 2010-11-16 21:23:21

+0

太棒了。所以我只有1個問題。因此,我將字符串轉換爲Ascii字節數組,然後通過BitConvert.ToUint32,它爲字符串「ABCD」返回值「1145258561」。把它轉換成HEX我得到了「44434241」,這真是太棒了!除了一件事 - 爲什麼它倒退呢? (41 = A,42 = B等)。我敢肯定,它與大端的小端序有關 – 2010-11-16 21:38:00

9

看看Convert.ToUInt32(string, int)。例如:

uint parsed = Convert.ToUInt32(str, 16); 
+1

根據評論,這不是他正在尋找的答案... – 2010-11-16 21:16:01

+1

是的,因爲他中途改變了這個問題。 – Femaref 2010-11-16 21:30:35

1
uint.Parse(hexString, System.Globalization.NumberStyles.HexNumber); 
0

這將轉換您的string(用鹼16表示)到uint

uint val = Convert.ToUInt32(str, 16); 
1

我想這是方法你想

Convert.ToUInt32(yourHexNumber, 16); 

看到的文檔here

1

見我的意見,但如果你想只轉換ASCII字符串爲十六進制,這是我懷疑:

public string HexIt(string yourString) 
{ 
    string hex = ""; 
    foreach (char c in yourString) 
    { 
     int tmp = c; 
     hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString())); 
    } 
    return hex; 
} 
+0

+ =在循環中的字符串是一個非常糟糕的主意!這造成了大量的垃圾。使用StringBuilder。 – Bryan 2010-11-16 21:30:07

+0

並不意味着高效,我想我們大多數人仍然在想這個問題的原意是什麼。 – kd7 2010-11-16 21:31:10

0

現在我想我明白你想要在評論bdukes答案。

如果你想爲字符串中的每個字符使用hex代碼,你可以使用LINQ獲取它。

var str = "ABCD"; 
var hex = str.Select(c => ((int)c).ToString("X")) 
    .Aggregate(String.Empty, (x, y) => x + y); 

hex將是一個字符串41424344