.class public Lcom/clj/fastble/utils/HexUtil; .super Ljava/lang/Object; .source "HexUtil.java" # static fields .field private static final DIGITS_LOWER:[C .field private static final DIGITS_UPPER:[C # direct methods .method static constructor ()V .registers 2 const/16 v0, 0x10 .line 5 new-array v1, v0, [C fill-array-data v1, :array_12 sput-object v1, Lcom/clj/fastble/utils/HexUtil;->DIGITS_LOWER:[C .line 8 new-array v0, v0, [C fill-array-data v0, :array_26 sput-object v0, Lcom/clj/fastble/utils/HexUtil;->DIGITS_UPPER:[C return-void nop :array_12 .array-data 2 0x30s 0x31s 0x32s 0x33s 0x34s 0x35s 0x36s 0x37s 0x38s 0x39s 0x61s 0x62s 0x63s 0x64s 0x65s 0x66s .end array-data :array_26 .array-data 2 0x30s 0x31s 0x32s 0x33s 0x34s 0x35s 0x36s 0x37s 0x38s 0x39s 0x41s 0x42s 0x43s 0x44s 0x45s 0x46s .end array-data .end method .method public constructor ()V .registers 1 .line 3 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static charToByte(C)B .registers 2 .line 114 const-string v0, "0123456789ABCDEF" invoke-virtual {v0, p0}, Ljava/lang/String;->indexOf(I)I move-result p0 int-to-byte p0, p0 return p0 .end method .method public static decodeHex([C)[B .registers 8 .line 66 array-length v0, p0 and-int/lit8 v1, v0, 0x1 if-nez v1, :cond_29 shr-int/lit8 v1, v0, 0x1 .line 72 new-array v1, v1, [B const/4 v2, 0x0 move v3, v2 :goto_b if-ge v2, v0, :cond_28 .line 76 aget-char v4, p0, v2 invoke-static {v4, v2}, Lcom/clj/fastble/utils/HexUtil;->toDigit(CI)I move-result v4 shl-int/lit8 v4, v4, 0x4 add-int/lit8 v5, v2, 0x1 .line 78 aget-char v6, p0, v5 invoke-static {v6, v5}, Lcom/clj/fastble/utils/HexUtil;->toDigit(CI)I move-result v5 or-int/2addr v4, v5 add-int/lit8 v2, v2, 0x2 and-int/lit16 v4, v4, 0xff int-to-byte v4, v4 .line 80 aput-byte v4, v1, v3 add-int/lit8 v3, v3, 0x1 goto :goto_b :cond_28 return-object v1 .line 69 :cond_29 new-instance p0, Ljava/lang/RuntimeException; const-string v0, "Odd number of characters." invoke-direct {p0, v0}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V throw p0 .end method .method public static encodeHex([B)[C .registers 2 const/4 v0, 0x1 .line 12 invoke-static {p0, v0}, Lcom/clj/fastble/utils/HexUtil;->encodeHex([BZ)[C move-result-object p0 return-object p0 .end method .method public static encodeHex([BZ)[C .registers 2 if-eqz p1, :cond_5 .line 16 sget-object p1, Lcom/clj/fastble/utils/HexUtil;->DIGITS_LOWER:[C goto :goto_7 :cond_5 sget-object p1, Lcom/clj/fastble/utils/HexUtil;->DIGITS_UPPER:[C :goto_7 invoke-static {p0, p1}, Lcom/clj/fastble/utils/HexUtil;->encodeHex([B[C)[C move-result-object p0 return-object p0 .end method .method protected static encodeHex([B[C)[C .registers 9 if-nez p0, :cond_4 const/4 p0, 0x0 return-object p0 .line 22 :cond_4 array-length v0, p0 shl-int/lit8 v1, v0, 0x1 .line 23 new-array v1, v1, [C const/4 v2, 0x0 move v3, v2 :goto_b if-ge v2, v0, :cond_24 add-int/lit8 v4, v3, 0x1 .line 25 aget-byte v5, p0, v2 and-int/lit16 v6, v5, 0xf0 ushr-int/lit8 v6, v6, 0x4 aget-char v6, p1, v6 aput-char v6, v1, v3 add-int/lit8 v3, v3, 0x2 and-int/lit8 v5, v5, 0xf .line 26 aget-char v5, p1, v5 aput-char v5, v1, v4 add-int/lit8 v2, v2, 0x1 goto :goto_b :cond_24 return-object v1 .end method .method public static encodeHexStr([B)Ljava/lang/String; .registers 2 const/4 v0, 0x1 .line 33 invoke-static {p0, v0}, Lcom/clj/fastble/utils/HexUtil;->encodeHexStr([BZ)Ljava/lang/String; move-result-object p0 return-object p0 .end method .method public static encodeHexStr([BZ)Ljava/lang/String; .registers 2 if-eqz p1, :cond_5 .line 37 sget-object p1, Lcom/clj/fastble/utils/HexUtil;->DIGITS_LOWER:[C goto :goto_7 :cond_5 sget-object p1, Lcom/clj/fastble/utils/HexUtil;->DIGITS_UPPER:[C :goto_7 invoke-static {p0, p1}, Lcom/clj/fastble/utils/HexUtil;->encodeHexStr([B[C)Ljava/lang/String; move-result-object p0 return-object p0 .end method .method protected static encodeHexStr([B[C)Ljava/lang/String; .registers 3 .line 42 new-instance v0, Ljava/lang/String; invoke-static {p0, p1}, Lcom/clj/fastble/utils/HexUtil;->encodeHex([B[C)[C move-result-object p0 invoke-direct {v0, p0}, Ljava/lang/String;->([C)V return-object v0 .end method .method public static extractData([BI)Ljava/lang/String; .registers 3 .line 118 aget-byte p0, p0, p1 const/4 p1, 0x1 new-array p1, p1, [B const/4 v0, 0x0 aput-byte p0, p1, v0 invoke-static {p1}, Lcom/clj/fastble/utils/HexUtil;->formatHexString([B)Ljava/lang/String; move-result-object p0 return-object p0 .end method .method public static formatHexString([B)Ljava/lang/String; .registers 2 const/4 v0, 0x0 .line 46 invoke-static {p0, v0}, Lcom/clj/fastble/utils/HexUtil;->formatHexString([BZ)Ljava/lang/String; move-result-object p0 return-object p0 .end method .method public static formatHexString([BZ)Ljava/lang/String; .registers 8 if-eqz p0, :cond_43 .line 50 array-length v0, p0 const/4 v1, 0x1 if-ge v0, v1, :cond_7 goto :goto_43 .line 52 :cond_7 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V const/4 v2, 0x0 .line 53 :goto_d array-length v3, p0 if-ge v2, v3, :cond_3a .line 54 aget-byte v3, p0, v2 and-int/lit16 v3, v3, 0xff invoke-static {v3}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String; move-result-object v3 .line 55 invoke-virtual {v3}, Ljava/lang/String;->length()I move-result v4 if-ne v4, v1, :cond_2d .line 56 new-instance v4, Ljava/lang/StringBuilder; const-string v5, "0" invoke-direct {v4, v5}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 .line 58 :cond_2d invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; if-eqz p1, :cond_37 .line 60 const-string v3, " " invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; :cond_37 add-int/lit8 v2, v2, 0x1 goto :goto_d .line 62 :cond_3a invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-virtual {p0}, Ljava/lang/String;->trim()Ljava/lang/String; move-result-object p0 return-object p0 :cond_43 :goto_43 const/4 p0, 0x0 return-object p0 .end method .method public static hexStringToBytes(Ljava/lang/String;)[B .registers 6 if-eqz p0, :cond_3c .line 98 const-string v0, "" invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_b goto :goto_3c .line 101 :cond_b invoke-virtual {p0}, Ljava/lang/String;->trim()Ljava/lang/String; move-result-object p0 .line 102 invoke-virtual {p0}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; move-result-object p0 .line 103 invoke-virtual {p0}, Ljava/lang/String;->length()I move-result v0 div-int/lit8 v0, v0, 0x2 .line 104 invoke-virtual {p0}, Ljava/lang/String;->toCharArray()[C move-result-object p0 .line 105 new-array v1, v0, [B const/4 v2, 0x0 :goto_20 if-ge v2, v0, :cond_3b mul-int/lit8 v3, v2, 0x2 .line 108 aget-char v4, p0, v3 invoke-static {v4}, Lcom/clj/fastble/utils/HexUtil;->charToByte(C)B move-result v4 shl-int/lit8 v4, v4, 0x4 add-int/lit8 v3, v3, 0x1 aget-char v3, p0, v3 invoke-static {v3}, Lcom/clj/fastble/utils/HexUtil;->charToByte(C)B move-result v3 or-int/2addr v3, v4 int-to-byte v3, v3 aput-byte v3, v1, v2 add-int/lit8 v2, v2, 0x1 goto :goto_20 :cond_3b return-object v1 :cond_3c :goto_3c const/4 p0, 0x0 return-object p0 .end method .method protected static toDigit(CI)I .registers 5 const/16 v0, 0x10 .line 88 invoke-static {p0, v0}, Ljava/lang/Character;->digit(CI)I move-result v0 const/4 v1, -0x1 if-eq v0, v1, :cond_a return v0 .line 90 :cond_a new-instance v0, Ljava/lang/RuntimeException; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Illegal hexadecimal character " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; move-result-object p0 const-string v1, " at index " invoke-virtual {p0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p0 invoke-virtual {p0, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p0 invoke-virtual {p0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-direct {v0, p0}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V throw v0 .end method