问题描述
我正在尝试将随机字符串转换为八进制 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();