将字符串转换为八进制

Transform a string into an octal

我正在尝试将随机字符串转换为八进制 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#。您可以将字符串 display/work 与八进制数字一起使用。例如这样:

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