【发布时间】:2012-06-22 14:25:30
【问题描述】:
当数字太大而无法容纳 64 位数字时,如何将作为十六进制字符串给出的值转换为八进制格式?
我目前像这样将字节数组转换为十六进制
Byte[] data = { 116, 4, 228, 18, 189, 145, 31, 7, 123, 74, 174, 151, 54, 144, 224, 49, 210, 169, 43, 213 };
hex = BitConverter.ToString(data).Replace("-", string.Empty);
十六进制输出:
7404E412BD911F077B4AAE973690E031D2A92BD5
如何获得八进制表示?
所以我早些时候尝试过,但它不起作用。
string binaryval = "";
binaryval = Convert.ToString(Convert.ToInt32(hexValue,16), 8);
foreach (char ch in hexValue)
{
binaryval += Convert.ToString(Convert.ToInt32(ch.ToString(), 16), 8);
}
【问题讨论】:
-
请注意,您的数字对于 Int32(最大 0xFFFFFFFF)甚至 Int64(最大 0xFFFFFFFFFFFFFFFF)来说太长了。因此,以下解决方案将不起作用...
-
是的,所以我正在寻找解决方案
-
@user175084 - 如果您必须使用大于 Int64 结构的值,那么您必须创建自己的值。最简单的解决方案是将它们作为两个单独的值处理,这些值可以放入 Int64 中,并将两个字符串简单地组合在一起。
-
@user175084 这还不够。因为
0xFF是0377(八进制),所以您需要做的不仅仅是获取两个字符并转换它们。 -
@user175084 看来你错过了我的帖子。你提到的数字是不正确的。检查我的帖子(或我的评论),看看如何获得正确的值。尝试在 Windows Calc 中输入
2BD5,您将看到25725。这不等于您的53325。请记住,三个十六进制半字节 (FFF) 等于四个八进制半字节 (7777)。你用两个半字节 (FF) 尝试了它,它给你一个休息值 (377)。