将字符串转换为十六进制抛出 java.lang.NumberFormatException
convert string to hex throws java.lang.NumberFormatException
我有一个像 #FFFFFF
的颜色,我想把它转换成 0xFFFFFF
这是我转换它的代码:
val hexColor = "0x${picture.color.drop(1)}".toInt()
当我 运行 项目时我得到这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string:
"0xFFFFFF"
知道为什么会出现此错误吗?
为了将十六进制 String
转换为 base10 数字并返回,请将基数作为参数传递给 toInt()
-方法:使用 toInt(16)
表示十六进制数字。
如果您只想将 FFFFFF
转换为 0xFFFFFF
,则不需要 .toInt()
,其余的代码应该可以正常工作。
如果你想将颜色的值从十六进制转换为十进制,那么你可以使用 .toInt(16) 函数,不带基数 (0x) 开头,如下所示:
val color = picture.color.drop(1).toInt(16)
或使用 Integer.decode()
,像这样:
val color = Integer.decode("0x${picture.color.drop(1)}")
在表达式 "0x${picture.color.drop(1)}".toInt()
中,0x
被添加到字符串中,然后被转换为 Int。 0x
对 Int 没有意义。所以先将其转换为 Int:
"0x${picture.color.drop(1).toInt()}"
// #FFFFFF --> 0x16777215 (wrong)
当然,将 0x 放在十进制数字之前会改变其 meaning/value。所以只将 Int 数字转换为十六进制:
"0x${picture.color.drop(1).toInt(16).toString(16)}"
// #FFFFFF --> 0xffffff (lowercase because that's how it's represented)
但它是一个十六进制字符串。 你之前已经是一个十六进制字符串,前面多了一个#
。所以只需 删除它并添加 0x
:
"0x${picture.color.drop(1)}"
// #FFFFFF --> 0xFFFFFF
如果要将颜色存储为 int 并 print 十六进制,则合并第 1 部分和第 2 部分:
val actualColourValue = picture.color.drop(1).toInt(16)
println(actualColourValue) // 16777215
println("0x${actualColourValue.toString(16)}") // 0xffffff
我有一个像 #FFFFFF
的颜色,我想把它转换成 0xFFFFFF
这是我转换它的代码:
val hexColor = "0x${picture.color.drop(1)}".toInt()
当我 运行 项目时我得到这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string:
"0xFFFFFF"
知道为什么会出现此错误吗?
为了将十六进制 String
转换为 base10 数字并返回,请将基数作为参数传递给 toInt()
-方法:使用 toInt(16)
表示十六进制数字。
如果您只想将 FFFFFF
转换为 0xFFFFFF
,则不需要 .toInt()
,其余的代码应该可以正常工作。
如果你想将颜色的值从十六进制转换为十进制,那么你可以使用 .toInt(16) 函数,不带基数 (0x) 开头,如下所示:
val color = picture.color.drop(1).toInt(16)
或使用 Integer.decode()
,像这样:
val color = Integer.decode("0x${picture.color.drop(1)}")
在表达式 "0x${picture.color.drop(1)}".toInt()
中,0x
被添加到字符串中,然后被转换为 Int。 0x
对 Int 没有意义。所以先将其转换为 Int:
"0x${picture.color.drop(1).toInt()}"
// #FFFFFF --> 0x16777215 (wrong)
当然,将 0x 放在十进制数字之前会改变其 meaning/value。所以只将 Int 数字转换为十六进制:
"0x${picture.color.drop(1).toInt(16).toString(16)}"
// #FFFFFF --> 0xffffff (lowercase because that's how it's represented)
但它是一个十六进制字符串。 你之前已经是一个十六进制字符串,前面多了一个#
。所以只需 删除它并添加 0x
:
"0x${picture.color.drop(1)}"
// #FFFFFF --> 0xFFFFFF
如果要将颜色存储为 int 并 print 十六进制,则合并第 1 部分和第 2 部分:
val actualColourValue = picture.color.drop(1).toInt(16)
println(actualColourValue) // 16777215
println("0x${actualColourValue.toString(16)}") // 0xffffff