将字符串转换为八进制

问题描述

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

解决方法

您需要多个步骤:

  • 获取输入字符串的字节(我假设为 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);
    }
}
,

因为在 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

,

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

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();