簡體   English   中英

讀取字節並在Java中將其屏蔽

[英]Reading byte and mask it in java

我應該從套接字獲取ID,但是此代碼未提供正確的ID。 有人可以告訴我代碼中的錯誤嗎? (請參閱下面的詳細信息)

for (int i = 0; i < numberOfSRecords; i++) {
    socketReader.read(cbuf, 0, 4);
    String Param_Codes_In_HEX =
        Integer.toHexString(0x000000ff & cbuf[2]) +
        Integer.toHexString(0x000000ff & cbuf[1]) +
        Integer.toHexString(0x000000ff & cbuf[0]);
    System.out.println("Param_Codes_In_HEX: "+Param_Codes_In_HEX);
    int paramCode = Integer.parseInt(Param_Codes_In_HEX, 16);
    if ((0x000000ff & cbuf[3]) ==0) {
    EnumParamCodes enumParamCode = 
         EnumConverterUtil.getEnumFor(EnumParamCodes.class, paramCode);
    System.out.println("Param_code " + paramCode + ": " + enumParamCode);
    }
  else if((0x000000ff & cbuf[3]) ==64)
   {
    paramCode = 0x0000ffff & paramCode ;
    EnumParamCodes enumParamCode = EnumConverterUtil.getEnumFor(EnumParamCodes.class, paramCode);
   System.out.println("Param_code " + paramCode + ": " + enumParamCode);
   }
  else if ((0x000000ff & cbuf[3]) ==128) {
      paramCode = 0x00ffffff & paramCode ;
      EnumAlarm enumParamCodeAlarm = EnumConverterUtil.getEnumFor(EnumAlarm.class, paramCode);
      System.out.println("Param_code " + paramCode + ": " + enumParamCodeAlarm);
    } 
  else{
      System.out.println("Error in the body of message");
        }
      }

注意:•對於數字和枚舉參數(ActualValue),Param_code對應於“參數”部分中的ID。

•對於數值和枚舉參數(SetValue),Param_code對應於0x40000000 +“參數”部分中的ID

•對於“警報參數”,Param_code對應於0x80000000 +“參數”部分中的ID

對於IMHO,該代碼相當復雜。 當您要進行位操作時,問題之一可能是字符串連接。 例如,字節1,2,3將變為123,而不是010203

String getByteString(byte b) {
    StringBuffer buf = new StringBuffer();
    String digit=Integer.toHexString(b &0xff);
    buf.append(digit);
    if (digit.length()<2) buf.append('0');
    return buf.toString();
}

這應該為您填充0

String Param_Codes_In_HEX = getByteString(cbuf[2]) + getByteString(cbuf[1]) + getByteString(cbuf[0]);

暫無
暫無

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

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