JAVA Code:

 
  1. public class HexUtils {

  2.  
  3. /** * 十六进制String转换成Byte[] * @param hexString the hex string * @return byte[] */

  4. public static byte[] hexStringToBytes(String hexString) {

  5. if (hexString == null || hexString.equals("")) {

  6. return null;

  7. }

  8. hexString = hexString.toUpperCase();

  9. int length = hexString.length() / 2;

  10. char[] hexChars = hexString.toCharArray();

  11. byte[] d = new byte[length];

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

  13. int pos = i * 2;

  14. d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

  15. }

  16. return d;

  17. }

  18.  
  19. /** * Convert char to byte * @param c char * @return byte */

  20. private static byte charToByte(char c) {

  21. return (byte) "0123456789ABCDEF".indexOf(c);

  22. }

  23.  
  24. /* 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 * @param src byte[] data * @return hex string */

  25. public static String bytesToHexString(byte[] src){

  26. StringBuilder stringBuilder = new StringBuilder("");

  27. if (src == null || src.length <= 0) {

  28. return null;

  29. }

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

  31. int v = src[i] & 0xFF;

  32. String hv = Integer.toHexString(v);

  33. if (hv.length() < 2) {

  34. stringBuilder.append(0);

  35. }

  36. stringBuilder.append(hv);

  37. }

  38. return stringBuilder.toString();

  39. }

 

这段代码在Java上使用或者kotlin引用都不会出现问题的,但现在Google宣布Kotlin成安卓官方语言,所以很多人都会将之前Java代码转成kotlin,如果是把Java代码直接通 studiog工具栏Code->Convert java File to Kotlin 生成kotlin代码,则会报以下的错误

Kotlinkotlin二进制与十六进制之间的转化

Kotlinkotlin二进制与十六进制之间的转化

这两个地方的出错都是由于kotlin位运算符只适用于Int 和 Long,所以先将shl ,and 前面的值转成Int 类型再执行shl ,and 等运算。Kotlin中每个数字类型支持如下的转换:

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

Kotlin Code

 
  1. object HexUtils {

  2.  
  3. /**

  4. * 十六进制String转换成Byte[]

  5. * @param hexString the hex string

  6. * *

  7. * @return byte[]

  8. */

  9. fun hexStringToBytes(hexString: String?): ByteArray? {

  10. var hexString = hexString

  11. if (hexString == null || hexString == "") {

  12. return null

  13. }

  14. hexString = hexString.toUpperCase()

  15. val length = hexString.length / 2

  16. val hexChars = hexString.toCharArray()

  17. val d = ByteArray(length)

  18. for (i in 0..length - 1) {

  19. val pos = i * 2

  20. d[i] = (charToByte(hexChars[pos]).toInt() shl 4 or charToByte(hexChars[pos + 1]).toInt()).toByte()

  21. }

  22. return d

  23. }

  24.  
  25. /**

  26. * Convert char to byte

  27. * @param c char

  28. * *

  29. * @return byte

  30. */

  31. private fun charToByte(c: Char): Byte {

  32.  
  33. return "0123456789ABCDEF".indexOf(c).toByte()

  34. }

  35.  
  36. /* 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。

  37. * @param src byte[] data

  38. * @return hex string

  39. */

  40. fun bytesToHexString(src: ByteArray?): String? {

  41. val stringBuilder = StringBuilder("")

  42. if (src == null || src.size <= 0) {

  43. return null

  44. }

  45. for (i in 0..src.size-1) {

  46. val v = src[i].toInt() and 0xFF

  47. val hv = Integer.toHexString(v)

  48. if (hv.length < 2) {

  49. stringBuilder.append(0)

  50. }

  51. stringBuilder.append(hv)

  52. }

  53. return stringBuilder.toString()

  54. }

  55. }

因为是工具类,一般都应该是单例,在kotlin中 Object +类名 即表示该

相关文章:

  • 2021-12-17
  • 2021-05-04
猜你喜欢
  • 2022-12-23
  • 2021-12-15
  • 2021-09-29
相关资源
相似解决方案