.NET 中的 base_convert
.NET 是否具有与 PHP 的 base_convert 等效的本机函数,还是我需要编写自己的函数? 我想从任何基数转换为任何其他基数 - 其中“to”基数或“from”基数可以是 2-36 的任何整数。
PHP 函数的示例:base_convert($number_to_convert, $from_base, $to_base)
// convert 101 from binary to decimal
echo base_convert('101', 2, 10);
// 5
正如 Luke 在 Jon Skeet 的答案的评论中所指出的:Convert.ToString 无法处理与任何任意基数的转换,只能处理 2、8、10和 16
更新: 显然,答案是:不,没有本地方式。 下面,Erik 展示了一种实现此目的的方法。 另一个实现在这里: http://www.codeproject.com/KB/macros/Convert .aspx
Does .NET have a native function that is equivalent to PHP's base_convert or will I need to write my own? I want to convert from any base to any other base -- where either the 'to' base or the 'from' base can be any integer 2-36.
Example of the PHP function: base_convert($number_to_convert, $from_base, $to_base)
// convert 101 from binary to decimal
echo base_convert('101', 2, 10);
// 5
As noted by Luke in the comments of Jon Skeet's answer: Convert.ToString can't handle conversion to/from any arbitrary base, only 2, 8, 10 and 16
Update: Apparently, the answer is: no, there is no native way. Below, Erik shows one way to do this. Another implementation is here: http://www.codeproject.com/KB/macros/Convert.aspx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编辑:这个答案非常方便,但仅适用于基数 2、8、10 和 16
您可以使用
Convert.ToInt32(text, base)
然后Convert.ToString(number, base)
:如果您要在基数 10 之间进行转换,则不需要需要指定 - 这是默认的。
请注意,这仅适用于基数 2、8、10 和 16。如果您想要其他内容,则必须编写自己的解析器/格式化程序。
EDIT: This answer is very convenient, but only works for bases 2, 8, 10 and 16
You can use
Convert.ToInt32(text, base)
and thenConvert.ToString(number, base)
:If you're converting to or from base 10, you don't need to specify that - it's the default.
Note that this only works for bases 2, 8, 10 and 16. If you want anything else, you'll have to write your own parser/formatter.
下面是一些代码,可将整数转换为最多 36 的任意基数,并将基数 x 值的字符串表示形式转换为整数(给定基数):
如果您不关心显示这些值,则可以使用扩展字符集中的字符 - 如果您坚持使用普通的 ascii,理论上您可以拥有 base256 值。 除此之外,我建议不要使用字符,而是使用其他一些唯一可识别的值 - 尽管我不太看到这个值。
Here's some code that'll convert an integer to an arbitrary base up to 36, and convert a string representation of a base x value to an integer (given the base):
If you're unconcerned with displaying these values, you can use extended characters in your chars set - if you stick to plain ascii, you can theoretically have base256 values. Going beyond that I would recommend not using chars, but instead using some other uniquely-identifiable value - though I don't much see the value.
在 ConvertToBase 中,以下行:
while (b10 > targetBase)
...应该是:
while (b10 >= targetBase)
它负责处理转换后的数字中弹出的基数(例如将“3”转换为基数 3)产生“3”而不是“10”)。
In ConvertToBase, the following line:
while (b10 > targetBase)
...should be:
while (b10 >= targetBase)
Which takes care of the base number popping up in the converted number (e.g. converting "3" into base 3 yields "3" instead of "10").