我知道你可以只使用一個整數並向上和向下計數,然後轉換爲十六進制字符串,但我需要使用大於最大值的整數(高達ffffffffffffffffffff或1208925819614629174706175 )。根據這些類型的數字,最有效的方法是什麼?由於Java向上/向下十六進制(字符串)
回答
如果你想要一個80位計數器,那麼你就可以創建存儲80位,然後add from the low part to the high part (with carry)
class Counter {
private long low; // 64 low bits of the counter
private short high; // 16 high bits
public void inc() {
low++;
if (low == 0) // wrapped around, which means there's a carry
high++; // add the carry to the high part
}
public String toHex() {
return String.format("%04X%016X", high & 0xffff, low);
}
}
的結構。如果你不想前導0然後更改toHex
功能這樣
if (low == 0)
return Long.toHexString(low);
else
return Integer.toHexString(high & 0xffff) + String.format("%016X", low);
但是,你can't count up to that maximum value in your whole life,因爲要計算只有64位值,你必須花費約9223372036秒或292年,假設你的CPU可以在一秒鐘內計算20億個值,而忽略循環和所有其他需要的東西d一個由操作系統。再增加16個位,你需要超過1900萬年來計算所有數據。
非常糟糕的命名約定。 [Java命名約定](https://stackoverflow.com/documentation/java/2697/oracle-official-code-standard/9031/naming-conventions#t=201706181648276636093)適用於以大寫字母開頭的類名,字段名稱以小寫字母開頭。你做的恰恰相反。 – Andreas
@Andreas我不熟悉Java和Java命名約定。剛修好了 –
'toHex()'不正確。在首次調用inc()之前調用'toHex()'將返回'00',而不是'0'。在第一次結轉之前調用'toHex()'將返回'0ffffffffffffffff'。調用'inc()',然後'toHex()'將返回10,這肯定是不正確的。 – Andreas
最快的方法可能會保留一個char[]
並與它計數。對於每個操作,您只需要更改90%情況下的最後一位數字。在9%的情況下,您需要更改兩位數,在0.9%的情況下等。
轉換爲String
只是一個簡單的陣列副本,因此可以附加到StringBuilder
。
請注意,這樣的優化很可能是無意義的。去一個BigInteger
,節省自己的麻煩和錯誤,並報告回來,如果它太慢。
存儲在2^64的基數中,而且您還需要只更改十進制中大約18位數字的最後一個數字。這會慢很多。無論如何,這個櫃檯是無用的,因爲它幾乎不會溢出 –
- 1. 二進制字符串到十六進制字符串java
- 2. JAVA轉換十六進制字符串
- 3. Javascript - 十進制字符串的十六進制字符串
- 4. 字符串爲十六進制和十六進制轉換爲字符串
- 5. PHP將字符串轉換爲十六進制和十六進制字符串
- 6. 十六進制字符到實際十六進制字符的字符串
- 7. 轉換十六進制字符串十六進制值
- 8. 將字符串轉換爲十六進制到十六進制
- 9. 十六進制字符串到十六進制整數
- 10. python字符串與十六進制轉義十六進制值
- 11. Java - 十六進制字符串表示爲整數十六進制
- 12. Python - 以十六進制數向上
- 13. VB.Net反向字節十六進制值
- 14. Java字符串十六進制字符串ASCII與重音
- 15. 從十六進制字符串轉換爲十六進制字符數組
- 16. 十六進制串&十六進制
- 17. 十六進制字符串到二進制字符串
- 18. Ruby:十六進制字符串到二進制字符串
- 19. 二進制字符串爲十六進制的Java
- 20. 將浮點數向量轉換爲十六進制/二進制字符串
- 21. 將十六進制字符串轉換爲二進制字符串 - Java
- 22. C++將十六進制字符串轉換爲十六進制char *十六進制數字
- 23. java:將十六進制數字字符串轉換爲十進制
- 24. Java字符串和十六進制字符表示
- 25. 十六進制字符串wireshark pcap
- 26. 字符串到十六進制
- 27. SHA1哈希十六進制字符串
- 28. 僅顯示十六進制字符串
- 29. 打印長十六進制字符串
- 30. 字符串到十六進制值
'java.math.BigInteger'並使用'BigInteger.toString(16)轉換爲十六進制字符串;' – rossum
定義「最高效」。 – Andreas