将Double转换为Bytes和Long转换为Bytes会产生不同的字节数组

时间:2015-03-20 14:13:08

标签: javascript c# arrays byte bytearray

我需要在C#中使用JavaScript复制我的哈希算法。它要求我将double转换为字节数组,但我似乎无法弄清楚c#方法BitConvert.GetBytes()如何生成其数据。我输入了数字448502400.0并输出 0,0,0,128,154,187,186,65 aka( 0x809ABBBA41 )。如果我在通过getBytes()运行它之前将数字转到很长时间,它会产生正确的结果。 128,154,187,26,0,0,0

我如何将该数字(448502400)转换为包含0x809ABBBA41的字节[],其中数字的存储方式不同?

仅供参考,不再可以更改C#代码。

编辑:以下是将数字转换为字节的两种方法(从其他问题中无耻地窃取)。 但这会产生很长的代表性而不是我所追求的双重表现。

 var timestampBytes = [0,0,0,0,0,0,0,0];
    var i = 8;
    do {
        timestampBytes[--i] = timestamp & (255);
        timestamp = timestamp >> 8;
    } while (i)

这一个

    function numberToByte(/*long*/long) {
    // we want to represent the input as a 8-bytes array
    var byteArray = [0, 0, 0, 0, 0, 0, 0, 0];

    for (var index = 0; index < byteArray.length; index++) {
        var byte = long & 0xff;
        byteArray[index] = byte;
        long = (long - byte) / 256;
    }

    return byteArray;
}

编辑:我的问题已在所附答案的回合中回答。

这是我的工作代码,它将生成一个byte [],格式为与BitConvert.GetBytes(double)相同的byte []

var bytes = [];
var view = new DataView(new ArrayBuffer(8));
    view.setFloat64(0, numberToTurnToDouble);
    bytes = bytes.concat(numberToByteArray(view.getUint32(4))); // The second half of the new number
    bytes = bytes.concat(numberToByteArray(view.getUint32(0))); // The first half of the number

// Converts an int32 number to its byte array representation
function numberToByteArray(int32) {
    var byteArray = [0, 0, 0, 0];
    for (var index = 0; index < byteArray.length; index++) {
        var byte = int32 & 0xff;
        byteArray[index] = byte;
        int32 = (int32 - byte) / 256;
    }
    return byteArray;
}

0 个答案:

没有答案