我想显示浮点数的二进制(或十六进制)表示.我知道如何手动转换(使用此处的方法),但我有兴趣看到相同的代码示例.
虽然我对C++和Java解决方案特别感兴趣,但我想知道是否有任何语言使它变得特别容易,所以我使这种语言不可知.我很想看到其他语言的解决方案.
编辑:我已经很好地覆盖了C,C++,C#和Java.是否有任何想要添加到列表中的替代语言专家?
C/C++很简单.
union ufloat { float f; unsigned u; }; ufloat u1; u1.f = 0.3f;
然后你输出u1.u
.您可以调整此实现.
双打也很简单.
union udouble { double d; unsigned long u; }
因为双打是64位.
Java更容易:使用Float.floatToRawIntBits()结合Integer.toBinaryString()和Double.doubleToRawLongBits结合Long.toBinaryString().
在C:
int fl = *(int*)&floatVar;
&floatVar
会得到地址内存然后(int*)
会指向这个地址内存,最后*得到4字节浮点值的int.然后你可以打印二进制格式或十六进制格式.
Java:谷歌搜索在Sun的论坛上找到了这个链接
具体(我自己没试过)
long binary = Double.doubleToLongBits(3.14159);
String strBinary = Long.toBinaryString(binary);
在.NET(包括C#)中,您可以BitConverter
接受多种类型,允许访问原始二进制文件; 获取十六进制,ToString("x2")
是最常见的选项(可能包含在实用程序方法中):
byte[] raw = BitConverter.GetBytes(123.45); StringBuilder sb = new StringBuilder(raw.Length * 2); foreach (byte b in raw) { sb.Append(b.ToString("x2")); } Console.WriteLine(sb);
奇怪的是,base-64具有1行转换(Convert.ToBase64String
),但base-16需要更多努力.除非您引用Microsoft.VisualBasic,否则在这种情况下:
long tmp = BitConverter.DoubleToInt64Bits(123.45); string hex = Microsoft.VisualBasic.Conversion.Hex(tmp);