在 Java 中将字符串转换为十六进制
我正在尝试将像“testing123”这样的字符串转换为Java中的十六进制形式。 我目前正在使用BlueJ。
而将其转换回来,除了向后转换之外,是一样的吗?
I am trying to convert a string like "testing123" into hexadecimal form in Java. I am currently using BlueJ.
And to convert it back, is it the same thing except backward?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
我建议这样,其中
str
是您的输入字符串:I would suggest something like this, where
str
is your input string:转换十六进制代码中的字母和字母中的十六进制代码。
Convert a letter in hex code and hex code in letter.
无需外部库的一行十六进制编码/解码(Java 8 及更高版本):
编码 :
解码 :
One line HEX encoding/decoding without external libs (Java 8 and above):
Encoding :
Decoding :
要采用另一种方式(十六进制到字符串),您可以使用
To go the other way (hex to string), you can use
使用来自多个线程的多个人的帮助..
我知道这个问题已经得到解答,但我想给出完整的编码和信息。 解码方法。
这是我的编码和 解码方法..
Using Multiple Peoples help from multiple Threads..
I know this has been answered, but i would like to give a full encode & decode method for any others in my same situation..
Here's my Encoding & Decoding methods..
首先使用 getBytes() 函数将其转换为字节,然后使用以下函数将其转换为十六进制:
First convert it into bytes using getBytes() function and then convert it into hex usign this :
好多了:
Much better:
这里有一些基准比较不同的方法和库。 Guava 在解码方面击败了 Apache Commons Codec。 Commons Codec 在编码方面击败了 Guava。 JHex 在解码和编码方面都击败了它们。
JHex 示例
一切都在 JHex 的单个类文件。 如果您不想在依赖树中再添加另一个库,请随意复制粘贴。 另请注意,它仅作为 Java 9 jar 提供,直到我弄清楚如何使用 Gradle 和 Bintray 插件发布多个发布目标。
Here are some benchmarks comparing different approaches and libraries. Guava beats Apache Commons Codec at decoding. Commons Codec beats Guava at encoding. And JHex beats them both for decoding and encoding.
JHex example
Everything is in a single class file for JHex. Feel free to copy paste if you don't want yet another library in your dependency tree. Also note, it is only available as Java 9 jar until I can figure out how to publish multiple release targets with Gradle and the Bintray plugin.
将字符串转换为十六进制:
这绝对是最简单的方法。
Convert String to Hexadecimal:
definitely this is the easy way.
检查字符串到十六进制和十六进制到字符串的解决方案,反之亦然
输出如下:
check this solution for String to hex and hex to String vise-versa
Output as follows :
将字符串转换为其十六进制表示法的一种简短而方便的方法是:
A short and convenient way to convert a String to its Hexadecimal notation is:
这是将其转换为十六进制的简短方法:
Here's a short way to convert it to hex:
为了确保十六进制始终为 40 个字符长,BigInteger 必须为正数:
To ensure that the hex is always 40 characters long, the BigInteger has to be positive:
http://commons.apache.org/codec/apidocs/org/ apache/commons/codec/binary/Hex.html
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html
使用
DatatypeConverter.printHexBinary()
:用法示例:
打印:
注意:这会给
Java 9
及更高版本带来一些额外的麻烦,因为 API 是默认情况下不包括在内。 作为参考,请参阅此GitHub
问题。Use
DatatypeConverter.printHexBinary()
:Example usage:
Prints:
Note: This causes a little extra trouble with
Java 9
and newer since the API is not included by default. For reference e.g. see thisGitHub
issue.编码为十六进制的数字必须表示某种字符编码,例如 UTF-8。 因此,首先将 String 转换为表示该编码中的字符串的 byte[],然后将每个字节转换为十六进制。
The numbers that you encode into hexadecimal must represent some encoding of the characters, such as UTF-8. So first convert the String to a byte[] representing the string in that encoding, then convert each byte to hexadecimal.
Java 17 引入了用于十六进制格式化的实用程序类:java.util.HexFormat
转换为十六进制:
从十六进制转换:
有关 HexFormat 的更多信息 此处
文档:此处
Java 17 introduces a utility class for hexadecimal formatting: java.util.HexFormat
Convert to hex:
Convert from hex:
More about HexFormat here
Documentation: here
这是另一个解决方案
Here an other solution
所有基于 String.getBytes() 的答案都涉及根据字符集对字符串进行编码。 您不一定获得组成字符串的 2 字节字符的十六进制值。 如果您真正想要的是相当于十六进制查看器,那么您需要直接访问字符。 这是我在代码中用于调试 Unicode 问题的函数:
然后, stringToHex("testing123") 将为您提供:
All answers based on String.getBytes() involve encoding your string according to a Charset. You don't necessarily get the hex value of the 2-byte characters that make up your string. If what you actually want is the equivalent of a hex viewer, then you need to access the chars directly. Here's the function that I use in my code for debugging Unicode issues:
Then, stringToHex("testing123") will give you:
此时您可以返回 hexString ,但需要注意的是,前导空字符将被删除,并且如果第一个字节小于 16,结果将具有奇数长度。如果您需要处理这些在这种情况下,您可以添加一些额外的代码来用 0 填充:
You could return
hexString
at this point, with the caveat that leading null-chars will be stripped, and the result will have an odd length if the first byte is less than 16. If you need to handle those cases, you can add some extra code to pad with 0s:获取十六进制的整数值
To get the Integer value of hex