我知道十进制可以通过下面来转换,可UInt64怎么转化为二进制呢?
int num = 16;
int type = 2;
string str = Convert.ToString(num, type);
MessageBox.Show(str);

解决方案 »

  1.   


    UInt64 u = UInt64.MaxValue - 1;
    string str = Convert.ToString((UInt32)(u / 4294967296), 2) + Convert.ToString((UInt32)(u % 4294967296), 2);
      

  2.   

    楼上答案正确吗?
    如果低32位字符串位数不够,连接起来结果不就错了吗?这个转换没有现成的方法,不过在Msdn里有个例子
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref2/html/T_System_IFormatProvider.htm其中就实现了ulong到二进制字符串的转换。
      

  3.   

    using System;class Test
    {
      static void Main()
      {
        Console.WriteLine(ToBin(UInt64.MaxValue));
      }
      
      static string ToBin(UInt64 u)
      {
        char [] s = new char[64];
        for (int i = 63; i >= 0; i--)
        {
          s[i] = (u & 1) == 1 ? '1' : '0';
          u >>= 1;
        }
        return new string(s);
      }
    }
      

  4.   

    功能OK        static string ConvertToBin(UInt64 myValue)
            {
                string s = string.Empty;            byte[] bytes = BitConverter.GetBytes(myValue);            for (int k = bytes.Length - 1; k >= 0; k--)
                {
                    s += Convert.ToString(bytes[k], 2);
                }            return s;
            }
      

  5.   

    楼主给分吧,解决了!
            ulong num = ulong.MaxValue;
            int type = 2;
            string str = Convert.ToString(BitConverter.ToInt64(BitConverter.GetBytes(num), 0), type);
            MessageBox.Show(str);
      

  6.   

    上述例子会把 ulong.MaxValue 转为 8 个字符的数组,然后转为 long 型的值,然后转为二进制字符串。(ulong)18446744073709551615(byte[])255 255 255 255 255 255 255 255(long)-1(string)“1111111111111111111111111111111111111111111111111111111111111111”
      

  7.   

    using System;class Test
    {
      static void Main()
      {
        ulong  num  = ulong.MaxValue;
        int    type = 2;
        string str  = Convert.ToString(unchecked((long)num), type);
        Console.WriteLine(str);
      }
    }
      

  8.   

    不用这么麻烦,直接转换为long就行了:
    unchecked((long)ulong.MaxValue)
      

  9.   

    空间Ⅳ
    你把 18446744073709551615 转成 long 试试看
      

  10.   

    这样更简单:ulong u = ulong.MaxValue;
    string str = Convert.ToString((long)u, 2);
      

  11.   

    原来不加unchecked就可以转,我一开始用了个(long)ulong.MaxValue没成功,还以为转不了呢,所以才用BitConverter,学艺不精啊,献丑了!
      

  12.   

    如果是一个编译时就可确定且会溢出的常量,强制转换就会造成编译错误。另,有一个/checked编译器选项:/checked 选项指定,不在 checked 或 unchecked 关键字的范围内、并且产生的值超出数据类型范围的整数算法语句是否将导致运行时异常。/checked[+ | -]备注checked 或 unchecked 关键字范围内的整数算法语句不受 /checked 选项的影响。如果不在 checked 或 unchecked 关键字范围内的整数算法语句产生的值超出数据类型范围,并且编译中使用了 /checked+ (/checked),则该语句将在运行时导致异常。如果编译中使用的是 /checked-,则该语句在运行时不会导致异常。此选项的默认值是 /checked-,所以只需完全省略此选项,就可以获得相同的效果。使用 /checked- 的一个情况是在生成大应用程序时:有时使用自动化工具生成这类应用程序,这些工具可能自动将 /checked 设置为 +,这时您可以通过指定 /checked- 重写全局默认值。在 Visual Studio 开发环境中设置此编译器选项1. 打开项目的“属性”页。2. 单击“生成”属性页。3. 单击“高级”按钮。4. 修改“检查算法上溢/下溢”属性。
      

  13.   

    如果是一个编译时就可确定且会溢出的常量,强制转换就会造成编译错误。 如果是一个编译时不能确定的量,由于默认的编译选项是 /checked-,相当于 unchecked(...),就不会有编译错误,也不会产生运行时异常。如果显式加上 unchecked(...),就可以确保即使在有 /checked+ 编译器选项时也不会产生运行时异常。