【问题标题】:Transform a string into an octal将字符串转换为八进制
【发布时间】:2021-09-07 02:39:24
【问题描述】:

我正在尝试将随机字符串转换为八进制 int32。如果有人给 ABCD,我想得到 101 102 103 104。我试过 int i = Convert.ToInt32("ABCD", 8);

【问题讨论】:

  • 为什么 A 会转换为 101?你为什么认为这是八进制?
  • 可能先转换为 ASCII 数字?
  • @Mithrandir 八进制 101 = 十进制 65 = 'A' 的 ASCII 码
  • 将您的单词/字符串拆分为字母/字符数组(如此处stackoverflow.com/questions/4246856/…)并调用Convert.ToInt32(arr[i], 8) foreach letter
  • @KlausGütter 我猜想声明的意图是完全不同的。

标签: c# string octal


【解决方案1】:

因为在 C# 中没有八进制整数文字,正如这里提到的 Octal equivalent in C#。您可以使用字符串来显示/使用八进制数。比如这样:

string text = "ABCD";
foreach (char c in text)
{
    var octalString = Convert.ToString(c, 8);
    Console.WriteLine(octalString);
}

控制台输出为: 101 102 103 104

【讨论】:

    【解决方案2】:

    您需要多个步骤:

    • 获取输入字符串的字节数(我假设为 ASCII 编码)
    • 以八进制格式格式化字节
    • 加入八进制以获得单个结果(可选)
    string input = "ABCD";
    var bytes = Encoding.ASCII.GetBytes(input); // 65,66,67,68
    var octals = bytes.Select(p => p.FormatOctal()).ToArray(); //101,102,103,104
    var result = string.Join(" ", octals); //"101 102 103 104"
    

    帮助以八进制表示格式化字节

    public static class MyExtensions
    {
        public static string FormatOctal(this byte value)
        {
            return Convert.ToString(value, 8);
        }
    }
    

    【讨论】:

    • 它可以工作,但是我选择的那个更快
    【解决方案3】:

    如果你需要一个包含八进制等值的字符串,你可以运行这个:

    var s = "ABCD"
        .Select(c => Convert.ToInt32(c))
        .Select(v => Convert.ToString(v, 8))
        .Aggregate((v0, v1) => $"{v0} {v1}");
    

    如果您需要表示八进制值的整数(我不建议这样做),您可以将字符串表示形式转换回整数并将它们存储在数组中:

    var i = "ABCD"
        .Select(c => Convert.ToInt32(c))
        .Select(v => Convert.ToString(v, 8))
        .Select(v => Convert.ToInt32(v))
        .ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2015-11-08
      • 2013-09-19
      相关资源
      最近更新 更多