Kotlinkotlin二进制与十六进制之间的转化
2019独角兽企业重金招聘Python工程师标准>>>
JAVA Code:
public class HexUtils {/** * 十六进制String转换成Byte[] * @param hexString the hex string * @return byte[] */public static byte[] hexStringToBytes(String hexString) {if (hexString == null || hexString.equals("")) {return null;}hexString = hexString.toUpperCase();int length = hexString.length() / 2;char[] hexChars = hexString.toCharArray();byte[] d = new byte[length];for (int i = 0; i < length; i++) {int pos = i * 2;d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));}return d;}/** * Convert char to byte * @param c char * @return byte */private static byte charToByte(char c) {return (byte) "0123456789ABCDEF".indexOf(c);}/* 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 * @param src byte[] data * @return hex string */public static String bytesToHexString(byte[] src){StringBuilder stringBuilder = new StringBuilder("");if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}
这段代码在Java上使用或者kotlin引用都不会出现问题的,但现在Google宣布Kotlin成安卓官方语言,所以很多人都会将之前Java代码转成kotlin,如果是把Java代码直接通 studiog工具栏Code->Convert java File to Kotlin 生成kotlin代码,则会报以下的错误
这两个地方的出错都是由于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
object HexUtils {/*** 十六进制String转换成Byte[]* @param hexString the hex string* ** @return byte[]*/fun hexStringToBytes(hexString: String?): ByteArray? {var hexString = hexStringif (hexString == null || hexString == "") {return null}hexString = hexString.toUpperCase()val length = hexString.length / 2val hexChars = hexString.toCharArray()val d = ByteArray(length)for (i in 0..length - 1) {val pos = i * 2d[i] = (charToByte(hexChars[pos]).toInt() shl 4 or charToByte(hexChars[pos + 1]).toInt()).toByte()}return d}/*** Convert char to byte* @param c char* ** @return byte*/private fun charToByte(c: Char): Byte {return "0123456789ABCDEF".indexOf(c).toByte()}/* 这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。* @param src byte[] data* @return hex string*/fun bytesToHexString(src: ByteArray?): String? {val stringBuilder = StringBuilder("")if (src == null || src.size <= 0) {return null}for (i in 0..src.size-1) {val v = src[i].toInt() and 0xFFval hv = Integer.toHexString(v)if (hv.length < 2) {stringBuilder.append(0)}stringBuilder.append(hv)}return stringBuilder.toString()}
}
因为是工具类,一般都应该是单例,在kotlin中 Object +类名 即表示该
转载于:https://my.oschina.net/chenyongchang/blog/1093860
Kotlinkotlin二进制与十六进制之间的转化相关推荐
- 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。(第二版)
[实验题目内容] 保持计算机默认的十进制不变(要求不用C++流操纵符转换基数为八进制形式oct,不用C++流操纵符转换基数为十六进制形式hex,也不用setbase(base)函数将基数设置为base ...
- 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。
利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能. [实验题目内容] [实验环境](使用的软件):VS - 2010 [项目设计源代码] [项目测试运行结果截图] [实验题目内容 ...
- 电子技术基础(三)__第5章 数字电路基础__二进制与十六进制之间的相互转换
二进制与十六进制之间的相互转换 由于16 = ,因此1位 十六进制数相当于4位二进制数, 这样, 十六进制数与二进制数之间的相互转让是十分方便的. 二进制整数转换成十六进制数的方法是: 从二进制数的 ...
- Java中byte[]与十六进制之间的转化
Java中byte是占8位二进制,十六进制的数是用4位二进制来表示的.因此当byte转十六进制时,将byte的8位二进制,分为高4位和低4位并分别转化为相应的十六进制,再合到一起即可.当十六进制转by ...
- python中二进制转8进制_Pythoner:教你二进制八进制十六进制的快速转化
Hi,你的 Python 学的怎么样了?要记得每天进步一点点哦,跟小帅b做个约定,再过不久我们一起来项目实战,所以现在咱们少看点片,没事敲下键盘,练练 Python 吧. 要是哪一天,我能爬取所有苍井 ...
- iOS 二进制、十进制、十六进制之间的转化
开发过程中不免会使用到进制之间转化 首先是十进制转换为二进制 /**十进制转换为二进制@param decimal 十进制数@return 二进制数*/ + (NSString *)getBinary ...
- 二进制八进制十六进制之间的快速转换------ 心算笔算方法总结
二进制数 0&1两种元素: 8进制数 0-7 八种元素: 十六进制数 0-9,a,b,c,d,e, ...
- 解读二进制与其他进制之间的转化
目录 一.进制的定义 二.进制的分类 三.进制之间的转换 1.十进制的转换 2.八进制的转换 3.十六进制的转换 4.二进制的转换 总结: 数制--也叫进制,是一种计算机运算的算法 一.进制的定义 了 ...
- 二、八、十、十六进制之间的转换
二进制.八进制.十进制.十六进制之间的转换 进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制.八进制.十进制与十六进制,它们之间区别在于数运算时是逢几进一位.比如二进制 ...
最新文章
- html xhtml and css,HTML与XHTML的重要区别
- 「GAN优化」小批量判别器如何解决模式崩溃问题
- GDI文字旋转90度
- 计算机中 什么是同步执行和异步执行?
- Session 丢失问题
- 感谢大家对我微软TECHED2013课程的支持
- 泸州田家炳中学2021高考成绩查询,2021年泸州中考线出来了吗
- highcharts ajax 数据格式,Highcharts ajax获取json对象动态生成报表生成 .
- 复练-软考网规-机房建设规范专题
- addressof表达式不能转换为long_C++入门到精通(七),数据类型的转换
- Nginx学习总结(9)——前端跨域问题解决
- 使用pycharm和python遇到的一些问题
- WIN10下配置Yolov3(VS2019,GPU)+opencv训练自己的数据集(绝对详细,小白型记录)
- 数字媒体技术考点整理
- BUUCTF:[SWPU2019]Network
- SQL Server如何导入mdf,ldf文件
- DEL命令居然无法删除文件夹!
- 彻底告别等待越狱!不越狱安装下载的IPA,iPhone 4S iOS5已测!!希望大家支持!
- [原创]-Day5.数据可视化之Pyecharts
- linux运行md文件,Linux常用的18个命令.md