簡體   English   中英

在Java中將具有偶數奇偶校驗字節的UTF-8字符轉換為ASCII 7位

[英]converting a UTF-8 character to an ASCII 7 bit with even parity byte in Java

我嘗試與之通信的設備采用偶數奇偶校驗的ASCII 7位字符。 嘗試轉換UTF-8字符時,我將其轉換為整數,然后轉換為二進制字符串。 檢查字符串,然后根據需要設置奇偶校驗位。

但是,當使用Byte.parseByte將其轉換回時,如果設置了簽名位,則會收到NumberFormatError。 我該如何解決?

public byte addParity(byte b){
    int a = (int)b;
    int c = 0;
    String s = Integer.toBinaryString(a);
    for(int i=0; i!=(8-s.length());)
    {
        s = "0" +s;
    }

    for(int i=0; i<s.length(); i++){

        if(s.substring(i, i+1).equals("1"))c++;
    }
    if(c%2==0)return b;
    else return Byte.parseByte(("1"+s.substring(1)),2);         

}

因為Byte.parseByte拒絕分析超出字節范圍(-128..127)的值,所以您收到錯誤消息。 因此,它拒絕解析類似"10001011"十進制139。 一種快速修復方法是改用Integer.parseInt並將結果轉換為字節:

else return (byte) Integer.parseInt(("1"+s.substring(1)),2);

但是,我會退后一步,並使用按位算術重做整個過程。

要設置一點,它應該足以執行以下操作:

return (byte) (b | 0x80);

暫無
暫無

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

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