在Javascript中将浮点数转换为二进制表示形式的最简单方法是什么?(例如1.0 - > 0x3F800000).
我试图手动完成,这在一定程度上(通常的数字)起作用,但是对于非常大或非常小的数字(没有范围检查)和特殊情况(NaN,无穷大等)都会失败:
function floatToNumber(flt)
{
var sign = (flt < 0) ? 1 : 0;
flt = Math.abs(flt);
var exponent = Math.floor(Math.log(flt) / Math.LN2);
var mantissa = flt / Math.pow(2, exponent);
return (sign << 31) | ((exponent + 127) << 23) | ((mantissa * Math.pow(2, 23)) & 0x7FFFFF);
}
Run Code Online (Sandbox Code Playgroud)
我重新发明轮子了吗?
编辑:我改进了我的版本,现在它处理特殊情况.
function assembleFloat(sign, exponent, mantissa)
{
return (sign << 31) | (exponent << 23) | (mantissa);
}
function floatToNumber(flt)
{
if (isNaN(flt)) // Special case: NaN
return …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题。我只是想从集合中删除重复的 byte[] 。
由于默认行为是比较引用,因此我认为创建 IEqualityComparer 会起作用,但事实并非如此。
我尝试过使用 HashSet 和 LINQ 的 Distinct()。
示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
namespace cstest
{
class Program
{
static void Main(string[] args)
{
var l = new List<byte[]>();
l.Add(new byte[] { 5, 6, 7 });
l.Add(new byte[] { 5, 6, 7 });
Console.WriteLine(l.Distinct(new ByteArrayEqualityComparer()).Count());
Console.ReadKey();
}
}
class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
public bool Equals(byte[] x, byte[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(byte[] obj)
{
return obj.GetHashCode();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出: …