【问题标题】:How to convert a string into hexadecimal value? [duplicate]如何将字符串转换为十六进制值? [复制]
【发布时间】:2020-08-16 23:52:43
【问题描述】:

我有 3 个 RGB 值,我想得到代表它们的十六进制 int 值,组合起来。

例如,假设我有R=255, G=30, B=0,这是FF1E00,如何得到等价的int值?

到目前为止,我已经设法从值中获取了一个十六进制字符串FF1E00,但是现在如何获取int 值呢?

// User defined rgb value
int r = 255;
int g = 30;
int b = 0;
// Converts rgb to hex, but in string
String hexString = String.format("%02X%02X%02X", r, g, b);

【问题讨论】:

  • stackoverflow.com/questions/11377944/…(不完全重复,但答案包含解决方案)
  • 这能回答你的问题吗? Converting A String To Hexadecimal In Java
  • 您的文字描述与代码示例不符。你说你已经有一个十六进制的字符串输入(但是大写并且没有0x 前缀)。但是您的代码以 3 个 RGB 整数值开头。投票结束,因为需要澄清。
  • 无论如何,OP,因为您已经拥有了三个组件,您可以在不进行转换的情况下执行int rgb = r << 16 | g << 8 | b
  • @SirNUB 当然可以。数字是数字,它不是十六进制数或十进制数。表示仅在字符串的上下文中才有意义。

标签: java hex rgb


【解决方案1】:

RGB 转 int(OP 澄清后)

您说您想将三个 RGB 值转换为整数。整数ff1e00(十六进制),十进制为16719360

为此,您可以使用以下逻辑直接从 RGB 值中获取:

int hex = r << 16 | g << 8 | b;

您也可以将hexString 转换回整数:

int hex = Integer.parseInt(hexString, 16);

顺便说一句,不要用System.out.println(hex) 来打印十六进制值。它将是16719360,因此是十进制。 int 确实存储有关其基地的任何信息。整数不知道基数。它们只有在您想要可视化它们时才会发挥作用,即转到String。然后你就可以使用格式化程序了,正如你已经想到的那样。


RGB 转十六进制字符串(在 OP 澄清之前)

你们非常接近。您已经设法将 RGB 值转换为十六进制字符串 FF1E00。要获得0xff1e00,您只需在其前面添加0x 并将所有内容设为小写即可。幸运的是,两者都可以直接使用格式化程序完成:

String.format("0x%02x%02x%02x", r, g, b);

我在格式前面添加了0x,并将您的%...X 模板更改为%...x,它提供了小写十六进制整数。


您也可以在之后进行简单的字符串操作:

hexString = "0x" + hexStrong.toLowerCase();

【讨论】:

  • 但这给出了一个字符串,不完全是我需要的,类似于:int hexValue = 0xff1e00
  • 那你需要什么?请澄清。
  • @SirNUB 所以你想要0xff1e00 作为int 的值吗? IE。 16719360?
  • @SirNUB 我根据您的评论更新了我的答案,现在正确吗?
【解决方案2】:

你可以这样做:

public class Main {
    public static void main(String[] args) {
        int r = 255;
        int g = 30;
        int b = 0;
        String hexString = String.format("%02X%02X%02X", r, g, b);
        int hex = Integer.parseInt(hexString, 16);
        System.out.println(hex);
        String hexString1 = Integer.toHexString(hex);
        System.out.println(hexString1);
        String hexString2 = String.format("0x%02x%02x%02x", r, g, b);
        System.out.println(hexString2);
    }
}

输出:

16719360
ff1e00
0xff1e00

【讨论】:

  • 请注意,格式可以在没有toLowerCase() 的情况下完成,只需%...x 而不是%...X
  • 我不想要一个十六进制字符串,我需要一个值。
  • @Zabuzard - 谢谢。我已经合并了。
  • @SirNUB - 检查更新的答案。
猜你喜欢
  • 1970-01-01
  • 2018-01-22
  • 2015-02-06
  • 2013-02-07
  • 2012-02-03
  • 2011-05-15
  • 2019-07-27
  • 2012-09-06
  • 2017-08-23
相关资源
最近更新 更多