簡體   English   中英

將US-ASCII編碼的字節轉換為整數並返回

[英]Converting US-ASCII encoded byte to integer and back

我有一個大小為2,3或4的字節數組。我需要將其轉換為正確的整數值。 我還需要反向執行此操作,即字節數組的2,3或4個字符整數。

例如,原始十六進制字節為:54和49.解碼后的字符串US-ASCII值為61.因此整數答案需要為61。

我已經閱讀了有關stackoverflow等的所有轉換問題,但是它們都給出了完全錯誤的答案,我不知道它是否可能是編碼?

如果我做了new String(lne,"US-ASCII") ,其中lne是我的字節數組,我得到正確的61.但是當這樣做時((int)lne[0] << 8) | ((int)lne[1] & 0xFF) ((int)lne[0] << 8) | ((int)lne[1] & 0xFF) ,我得到了完全錯誤的答案。

這可能是一個愚蠢的錯誤,或者我完全不理解Java中的數字表示方案和編碼/解碼思想。

任何幫助,將不勝感激。

注意:我知道我可以將String解析為整數,但我想知道是否有一種方法可以使用快速操作,如移位和二進制算術?

以下是關於如何使用字節移位和十進制算術等快速操作來加快速度的想法。 假設您有當前代碼:

byte[] token;  // bytes representing a bunch of ascii numbers
int n = Integer.parseInt(new String(token));  // current approach

然后你可以改為替換最后一行並執行以下操作(假設沒有負數,沒有外來語言字符等):

int n = 0;
for (byte b : token)
  n = 10*n + (b-'0');

出於興趣,這導致我在大量數據集上加速大約28%。 我認為這是因為不必分配新的String對象,然后在每次parseInt調用后將它們parseInt

您需要兩個轉換步驟。 首先,將您的ascii字節轉換為字符串。 這就是new String(lne,"us-ascii")為你做的事情。 然后 ,將數字的字符串表示形式轉換為實際數字。 為此您使用類似Integer.parseInt(theString)東西 - 記得處理NumberFormatException。

如你所說, new String(lne,"US-ASCII")將為您提供正確的字符串。 要將String轉換為整數,請使用int myInt = Integer.parseInt(new String(lne,"US-ASCII"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM