我有一个长度为60的二进制字符串,表示一小时的分钟是/否状态,我想用Java编写它们。我的三个目标是,这应该是
我的第一个想法是将字符串转换为Long(8字节)并保存,但由于浮点数格式和尾数长度,在JavaScript中读取文件时,我的二进制字符串似乎很复杂。有什么好办法呢?
答案 0 :(得分:0)
Javascript可以正确处理最多2 53 -1的整数,因此如果将60位数据拆分为两个,则可以使用标准方法,并将其存储为两个32位整数。
或者,您可以存储数据,例如作为一个15个字符的十六进制字符串,并将其重新编码为二进制字符串,如下所示:
function hex2bin(s) {
return ("0000000000000000000000000000000" + parseInt(s.substr(0,8), 16).toString(2)).substr(-32)
+ ("000000000000000000000000000" + parseInt(s.substr(8,7), 16).toString(2)).substr(-28);
}
document.write(hex2bin("123456789ABCDEF"));
或者您可以使用base-64字符串将数据大小减少到10个字符,并使用以下内容对其进行解码:
function base642bin(s) {
var b = "", e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for (var i = 0; i < 10; i++) b += ("00000" + e.indexOf(s.charAt(i)).toString(2)).substr(-6);
return b;
}
document.write(base642bin("EjRWeJq83v"));
如果您使用内置Java函数进行base-64编码,请检查它使用的编码表(有时+
和/
将替换其他字符。)
答案 1 :(得分:0)
长二进制字符串可以转换为 BigInt 并返回二进制。
const big = BigInt('0b' + a);
// store, perform math, etc.
const binaryStr = big.toString(2);
这支持大于 253 - 1 (Number.MAX_SAFE_INTEGER) 的值。例如。这是正在转换的 95 个字符的二进制字符串:
BigInt('0b' + '10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101')
24847893154024981730169397005n
前缀 0b
告诉构造函数这是一个二进制表示。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt