Bar*_*art 6 javascript floating-point integer casting typed-arrays
这个问题可能是"不寻常的",但我需要将float Number转换为整数Number,而不修改其二进制表示.
例如,浮点数37.5由字节表示0x42160000(根据IEEE 754).我需要重新解释0x42160000为整数,即数字1108738048
我该怎么做呢?我想可能有一些按位技巧来完成这个?
要清楚,我不是在寻找Math.round或parseInt.
类型化数组在这里可以派上用场:http://jsfiddle.net/rtYrM/.
// create array which is specialized for holding 1 float value
var floatArray = new Float32Array(1);
// set the float value
floatArray[0] = 37.5;
// use its buffer (4 bytes for 1 float) and pass it to an array
// specialized for integers
var intArray = new Int32Array(floatArray.buffer);
// the integer array will interpret the buffer bytes as an integer,
// which seems to be just what you want
intArray[0] === 1108738048; //true
Run Code Online (Sandbox Code Playgroud)
intArray.buffer将保持相同的字节floatArray.buffer,但不是通过缓冲区访问它,而是使用数组本身,它将读取这些字节作为类型数组指定的类型:作为整数Int32Array,和浮点数Float32Array.
在这种情况下(在基数10):
floatArray设置为值[ 37.5 ].floatArray.buffer自动设置为值[ 0, 0, 22, 66 ].floatArray.buffer被传递给一个新的整数数组intArray.intArray.buffer因此也包含这些值[ 0, 0, 22, 66 ].intArray包含[ 1108738048 ]使用其缓冲区计算的值.| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |