【问题标题】:C# convert string to uintC# 将字符串转换为 uint
【发布时间】:2011-05-11 01:53:59
【问题描述】:

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

string str = "HELLOWORLDZZZ";

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

【问题讨论】:

  • 注意:这个原始字符串不是十六进制
  • 你的意思是不是十六进制...... ascii表示是一个字符串btw..
  • 查看我对新字符串的编辑
  • 我知道...我不明白您所说的“转换为 uint”是什么意思,您是指所有字符的 ascii 值的总和吗?
  • 一个 uint 只有 4 字节长。 ASCII 表示为 1 个字节长。您希望如何在 4 字节字段中存储 13 个字符?

标签: c# string uint


【解决方案1】:

您可以使用Encoding.ASCII.GetBytes 将您的字符串转换为具有ASCII 编码的byte 数组(每个字符占用一个byte)。然后,调用BitConverter.ToUInt32 将该字节数组转换为uint。但是,作为 @R。 Bemrose 在 cmets 中指出,uint 只有 4 个 bytes,因此您需要先对数组进行一些分区。

【讨论】:

  • 一个 uint 究竟如何表示 4 字节字符串? “ABCD”如何在 uint 中表示?
  • @whydna,7-bit ASCII table 用于在位表示和字符之间进行转换。所以“ABCD”变成了01000001 01000010 01000011 01000100,十进制是“1094861636”,uint 将包含的值。
  • 太棒了。所以我还有1个问题。所以我将我的字符串转换为 Ascii 字节数组,然后将其放入 BitConvert.ToUint32,它为字符串“ABCD”返回值“1145258561”。将其转换为十六进制,我得到“44434241”,这太棒了!除了一件事——为什么它倒退了? (41 = A,42 = B,等等)。我确定它与大端小端有关
  • @whydna 抱歉,是的,BitConverter.ToUInt32 是小端序,所以 1145258561"ABCD" 输入的正确十进制值。你可以在调用BitConverter.ToUInt32之前反转数组,你会得到我上面给出的十进制值,它对应于十六进制的41424344
  • 太棒了。效果很好。仅供将来参考,它取决于您的计算机系统的字节序 - 因此您需要检查 BitConvert.IsLittleEndian 并在必要时反转数组。
【解决方案2】:

我认为这是你想要的方法

Convert.ToUInt32(yourHexNumber, 16);

请参阅文档here

【讨论】:

    【解决方案3】:
    uint.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
    

    【讨论】:

      【解决方案4】:

      请参阅我的评论,但如果您只想将 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;
      }
      

      【讨论】:

      • += 在循环中的字符串上是一个非常糟糕的主意!这会产生大量垃圾。使用 StringBuilder。
      • 并不是为了高效,我想我们大多数人仍然想知道这个问题的初衷是什么。
      【解决方案5】:

      这会将您的 string(使用 Base 16 表示)转换为 uint

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

      【讨论】:

        【解决方案6】:

        现在我想我明白你想要对 bdukes 回答的评论了。

        如果您想要字符串中每个字符的 hex 代码,您可以使用 LINQ 获取它。

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

        hex 将是一个字符串 41424344

        【讨论】:

          猜你喜欢
          • 2022-10-16
          • 1970-01-01
          • 2014-03-30
          • 2013-10-30
          • 2010-09-12
          • 1970-01-01
          • 1970-01-01
          • 2013-03-05
          • 1970-01-01
          相关资源
          最近更新 更多