首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#不支持将ulong转换为bin/oct/dec/hex string -> Convert.ToString(ulong,base)

C#不支持将ulong转换为bin/oct/dec/hex string -> Convert.ToString(ulong,base)
EN

Stack Overflow用户
提问于 2015-12-10 07:52:09
回答 2查看 828关注 0票数 3

我会将ulong值的bin/oct/dec/hex值作为字符串。所以我必须将convert.tostring(,base)与所需的base一起使用。为了支持这一点,我将ulong值转换为long,而convert.tostring(,base)支持long,以便将bin/oct/dec/hex值作为ulong的字符串。我说的对吗?

代码语言:javascript
复制
//while Convert.ToString does not support ulong with base
//Convert.ToString(ulong.MaxValue, 2);

// following code sample is the same like not supported ToString on line 2, right? 
ulong ul = ulong.Maxvalue; 
long l = (long)ul;
Convert.ToString(l, 8); //8 => oct, 2 => bin

好的,对于dec,我只能使用ul.ToString();对于十六进制,我只能使用ul.ToString("X");

基于Copy bits from ulong to long in C#,我有点困惑。这给我提供了ulong的正确的Oct和Bin字符串表示吗?

相关要点:https://gist.github.com/chubbson/375b535243c166d28119

EN

回答 2

Stack Overflow用户

发布于 2015-12-10 08:43:59

只要您要转换的类型没有负的概念,您的转换过程就应该有效,因此您应该可以安全地执行除10之外的每个基数。

代码语言:javascript
复制
public static void Main()
{
    ulong ul = ulong.MaxValue; 
    long l = (long)ul;
    var s = Convert.ToString(l, 8); //8 => oct, 2 => bin
    Console.WriteLine(s); //Outputs 1777777777777777777777
}

https://dotnetfiddle.net/fsoIkw

票数 1
EN

Stack Overflow用户

发布于 2015-12-10 19:28:48

Convert.ToString只允许对byte、int、short和long类型进行基本转换。下面的BasedValueConverter允许对字节、sbyte、short、ushort、int、uint、long、ulong进行bin/oct/dec/hex表示。

查看BasedValueConverter类实现的相关https://gist.github.com/chubbson/375b535243c166d28119。这是输出(LinqpadScript):

代码语言:javascript
复制
BasedValueConverter bvc;
bvc = new BasedValueConverter(byte.MaxValue.Dump("BasedValueConverter byte"));
bvc.ToStringBin().Dump();  // 11111111
bvc.ToStringOct().Dump();  // 377
bvc.ToStringDec().Dump();  // 255
bvc.ToStringHex().Dump();  // FF

bvc = new BasedValueConverter(byte.MinValue);
bvc.ToStringBin().Dump();  // 00000000
bvc.ToStringOct().Dump();  // 000
bvc.ToStringDec().Dump();  // 000
bvc.ToStringHex().Dump();  // 00



bvc = new BasedValueConverter(sbyte.MaxValue.Dump("BasedValueConverter sbyte"));
bvc.ToStringBin().Dump();  // 01111111
bvc.ToStringOct().Dump();  // 177
bvc.ToStringDec().Dump();  // 127
bvc.ToStringHex().Dump();  // 7F

bvc = new BasedValueConverter((sbyte)-1);
bvc.ToStringBin().Dump();  // 11111111
bvc.ToStringOct().Dump();  // 377
bvc.ToStringDec().Dump();  // -001
bvc.ToStringHex().Dump();  // FF



bvc = new BasedValueConverter(short.MaxValue.Dump("BasedValueConverter short"));
bvc.ToStringBin().Dump();  // 0111111111111111
bvc.ToStringOct().Dump();  // 077777 
bvc.ToStringDec().Dump();  // 32767
bvc.ToStringHex().Dump();  // 7FFF

bvc = new BasedValueConverter((short)-1);
bvc.ToStringBin().Dump();  // 1111111111111111
bvc.ToStringOct().Dump();  // 177777
bvc.ToStringDec().Dump();  // -00001
bvc.ToStringHex().Dump();  // FFFF



bvc = new BasedValueConverter(ushort.MaxValue.Dump("BasedValueConverter ushort"));
bvc.ToStringBin().Dump();  // 1111111111111111
bvc.ToStringOct().Dump();  // 177777
bvc.ToStringDec().Dump();  // 65535
bvc.ToStringHex().Dump();  // FFFF

bvc = new BasedValueConverter(ushort.MinValue);
bvc.ToStringBin().Dump();  // 0000000000000000
bvc.ToStringOct().Dump();  // 000000
bvc.ToStringDec().Dump();  // 00000
bvc.ToStringHex().Dump();  // 0000



bvc = new BasedValueConverter(int.MaxValue.Dump("BasedValueConverter int"));
bvc.ToStringBin().Dump();  // 01111111111111111111111111111111
bvc.ToStringOct().Dump();  // 17777777777
bvc.ToStringDec().Dump();  // 2147483647
bvc.ToStringHex().Dump();  // 7FFFFFFF

bvc = new BasedValueConverter((int)-1);
bvc.ToStringBin().Dump();  // 11111111111111111111111111111111
bvc.ToStringOct().Dump();  // 37777777777
bvc.ToStringDec().Dump();  // -0000000001
bvc.ToStringHex().Dump();  // FFFFFFFF



bvc = new BasedValueConverter(uint.MaxValue.Dump("BasedValueConverter uint"));
bvc.ToStringBin().Dump();  // 11111111111111111111111111111111
bvc.ToStringOct().Dump();  // 37777777777
bvc.ToStringDec().Dump();  // 4294967295
bvc.ToStringHex().Dump();  // FFFFFFFF

bvc = new BasedValueConverter(uint.MinValue);
bvc.ToStringBin().Dump();  // 00000000000000000000000000000000
bvc.ToStringOct().Dump();  // 00000000000
bvc.ToStringDec().Dump();  // 0000000000
bvc.ToStringHex().Dump();  // 00000000



bvc = new BasedValueConverter(long.MaxValue.Dump("BasedValueConverter long"));
bvc.ToStringBin().Dump();  // 0111111111111111111111111111111111111111111111111111111111111111
bvc.ToStringOct().Dump();  // 0777777777777777777777
bvc.ToStringDec().Dump();  // 9223372036854775807
bvc.ToStringHex().Dump();  // 7FFFFFFFFFFFFFFF

bvc = new BasedValueConverter((long)-1);
bvc.ToStringBin().Dump();  // 1111111111111111111111111111111111111111111111111111111111111111
bvc.ToStringOct().Dump();  // 1777777777777777777777
bvc.ToStringDec().Dump();  // -00000000000000000001
bvc.ToStringHex().Dump();  // FFFFFFFFFFFFFFFF



bvc = new BasedValueConverter(ulong.MaxValue.Dump("BasedValueConverter ulong"));
bvc.ToStringBin().Dump();  // 1111111111111111111111111111111111111111111111111111111111111111
bvc.ToStringOct().Dump();  // 1777777777777777777777
bvc.ToStringDec().Dump();  // -00000000000000000001
bvc.ToStringHex().Dump();  // FFFFFFFFFFFFFFFF

bvc = new BasedValueConverter(ulong.MinValue);
bvc.ToStringBin().Dump();  // 0000000000000000000000000000000000000000000000000000000000000000
bvc.ToStringOct().Dump();  // 0000000000000000000000
bvc.ToStringDec().Dump();  // 00000000000000000000
bvc.ToStringHex().Dump();  // 0000000000000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34191275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档