我需要在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;
}