我正在尝试使用通用函数将整数,短整数和其他函数转换为字节数组,反之亦然,所有这些都使用每个值的预定义字节数。
编码功能似乎是正确的。它看起来像这样:
/**Parameters:
data - string, every `bytes` bytes will form one number entry
array - the output array refference where numbers will be put
bytes - number of bytes per entry
big_endian - use big endian? (little endian otherwise)
*/
function fromBytes(data, array, bytes, big_endian) {
//Temporary variable for current number
var num;
//Loop through byte array
for(var i=0, l=data.length; i<l; i+=bytes) {
num=0;
//Jump through the `bytes` and add them to number
if(big_endian) {
for(var b=0; b<bytes; b++) {
num+=(num << 8)+data.charCodeAt(i+b);
}
}
else {
for(var b=bytes-1; b>=0; b--) {
num+=(num << 8)+data.charCodeAt(i+b);
}
}
//Add decomposed number to an array
array.push(num);
}
return array;
}
如果出现问题请告诉我。
现在,编码函数对于小端看起来很容易 - 我只需要number%255
然后将数字除以255(并重复该数字)。
但是我不确定如何用big endian编码数字 - 如何获得最大的部分?
这是我缺少部分的功能:
/**Parameters:
array - arrau of numbers to encode
bytes - number of bytes per entry
big_endian - use big endian? (little endian otherwise)
*/
function toBytes(array, bytes, big_endian) {
//The produced string
var data = "";
//last retrieved number
var num;
//Loop through byte array
for(var i=0, l=array.length; i<l; i++) {
num = array[i];
if(big_endian) {
/** ??? **/
}
else {
for(var b=bytes-1; b>=0; b--) {
data+=String.fromCharCode(num%255);
num = Math.floor(num/255);
}
}
//Add decomposed number to an array
array.push(num);
}
return array;
}
小端转换有效。你能给我一个线索,如何使用Big endian将int,short或double编码为4,2或8个字节?