对我来说,BigInteger将 1M 位数字转换byte []为大约 39 秒。对你来说太多了吗?
Random r = new Random ();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++)
sb.append ("0123456789".charAt(r.nextInt(10)));
long t = System.currentTimeMillis();
BigInteger bi = new BigInteger (sb.toString());
byte [] bytes = bi.toByteArray();
System.out.println(System.currentTimeMillis() - t);
关于小数。让我们假设你有一个大的小数形式<n digits>.<m digits>。您想将其转换为k点后位的二进制。你需要解一个方程:D/(10^m) = X/(2^k),其中 X 是整数。这里 D 是没有点的小数(小数的尾数),X 是没有点的二进制(二进制的尾数)。方程很容易解:X ~ round(D*(2^k)/(10^m)). X 必须是整数,所以我们添加了round().
例如,您需要将 12.34 转换为点后 3 位的二进制。
n = 2
m = 2
D = 1234
k = 3
X ~ round(D*(2^k)/(10^m)) = round(1234 * 8 / 100) = round(98.72) = 99 = 1100011b
请记住,我们需要点后 3 位,所以我们的答案是 12.34 ~ 1100.011b
所有这些计算都可以使用 BigInteger 完成。