2010-11-16 137 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