2017-12-21 22 views
2

javaで書かれた関数をKotlin固有に変換する際に問題があります。ここ バイトをKotlinに変換するjava関数を変換する

は、Javaで書かれている:

private boolean isOldOemCommissioningFormat(byte[] assetData) { 
    if (assetData == null 
      || assetData.length < mAssetDataDelimeterByteCount + mAssetDataOwnerIdByteCount + mAssetDataIdLeadingZerosByteCount + mAssetDataIdByteCount) 
     return false; 

    int oemMarkerIndex = mAssetDataDelimeterByteCount + mAssetDataIdLeadingZerosByteCount + mAssetDataIdByteCount; 
    if (assetData[oemMarkerIndex] == PARTIAL_OEM_MARKER || assetData[oemMarkerIndex] == FULL_OEM_MARKER) 
     return ((assetData[oemMarkerIndex + 1] >> 6) & 0x01) == 0; 

    return false; 

} 

をしかし、私はそれが私にこのを与えるのAndroid StudioのIDEコンバータを使用してKotlinに変換していたとき:

private fun isOldOemCommissioningFormat(assetData: ByteArray?): Boolean { 
    if (assetData == null || assetData.size < mAssetDataDelimeterByteCount + mAssetDataOwnerIdByteCount + mAssetDataIdLeadingZerosByteCount + mAssetDataIdByteCount) 
     return false 

    val oemMarkerIndex = mAssetDataDelimeterByteCount + mAssetDataIdLeadingZerosByteCount + mAssetDataIdByteCount 
    return if (assetData[oemMarkerIndex] == PARTIAL_OEM_MARKER || assetData[oemMarkerIndex] == FULL_OEM_MARKER) assetData[oemMarkerIndex + 1] shr 6 and 0x01 == 0 else false 

} 

それは私が推測間違っconvertionを与え、プラス'shr'は未解決の参照として赤でマークされます。

どのように正しく変換できますか?

他の変数は以下のとおりです。

public static final byte PARTIAL_OEM_MARKER = '#'; 
public static final byte FULL_OEM_MARKER = '&'; 
public static final int OEM_COMMISSIONING_CUSTOMER_ID_ENCODING_CHARACTERS_COUNT = 40; 
public static final int OEM_COMMISSIONING_CUSTOMER_ID_ENCODING_FIRST_CHARACTER_INDEX = 64; 

private final int mAssetDataIdLeadingZerosByteCount; 
private final int mAssetDataIdByteCount; 
private final int mAssetDataDelimeterByteCount; 
private final int mAssetDataOwnerIdByteCount; 

答えて

1

Kotlin "SHR" でのみintとlongのために利用できる、してみてください値を変換する

assetData[oemMarkerIndex + 1].toInt() 
1

assetData[oemMarkerIndex + 1] からIntに変換バイト:assetData[oemMarkerIndex + 1].toInt()

関連する問題