C#将字符串转换为无符号整数

9

所以,我有一个由13个字符组成的字符串。

string str = "HELLOWORLDZZZ";

我需要将此内容以ASCII表示(十六进制)存储在一个uint变量中。我该怎么做?


2
注意:此原始字符串不是十六进制。 - Andy Hin
1
我不太明白你所说的“转换为uint”,是指所有字符的ASCII值之和吗? - Richard J. Ross III
2
一个uint只有4个字节长。ASCII表示法只有1个字节长。你怎么能期望在一个4字节的字段中存储13个字符呢? - Powerlord
R. Bemrose - 这正是我的问题。我猜我需要把它分成4个块。 - Andy Hin
我正在调用的方法只接受 uint :( 为了更容易理解,我们可以假设它接受一个 uint[] 数组。 - Andy Hin
显示剩余10条评论
6个回答

12
您可以使用 Encoding.ASCII.GetBytes将字符串转换为使用ASCII编码的byte数组(每个字符占用一个byte)。然后,调用BitConverter.ToUInt32将该byte数组转换为uint。但是,正如@R. Bemrose在评论中所指出的那样,uint仅由4个byte组成,因此您需要对数组进行一些分区处理。

一个uint如何表示4字节字符串?"ABCD"如何在uint中表示? - Andy Hin
1
@whydna,7位ASCII表用于在位表示和字符之间进行转换。因此,“ABCD”变成了01000001 01000010 01000011 01000100,在十进制中为“1094861636”,这是uint包含的值。 - jball
太棒了。所以我只有一个问题。我将我的字符串转换为Ascii字节数组,然后通过BitConvert.ToUint32将其传递,该函数返回字符串“ABCD”的值“1145258561”。将其转换为十六进制,我得到“44434241”,这很棒!除了一件事-为什么它是反过来的?(41 = A,42 = B等)。我确定这与大端小端有关。 - Andy Hin
1
@whydna 对不起,没错,BitConverter.ToUInt32 是小端字节序,所以输入 "ABCD" 的正确十进制值是 1145258561。您可以在调用 BitConverter.ToUInt32 之前反转数组,然后您将获得我上面给出的十进制值,对应于十六进制的 41424344 - jball
太好了。非常好用。只是为了以后的参考,它取决于您计算机系统的字节序 - 因此,您需要检查BitConvert.IsLittleEndian并在必要时反转数组。 - Andy Hin

5
我认为这是您想要的方法。
Convert.ToUInt32(yourHexNumber, 16);

请在此处查看相关技术文档。


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

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;
}

1
在循环中对字符串使用 += 是一个非常糟糕的想法!!!这会创建大量垃圾。请使用 StringBuilder。 - Bryan
这段代码并不是为了效率而设计的,我认为我们大多数人仍然在猜测问题的最初意图是什么。 - Ta01

0

这将把您的 字符串(使用 Base 16 表示法)转换为 uint

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接