Reputation: 32144
I have a string that actually each byte in it is a representation of a hexadecimal number.
I want to create a new string that contains the actual hexadecimal numbers of each character.
I know that i can do String.getBytes()
to get the bytes of each character, i know iterate through it with i=0;i<=String.getBytes().length
. what i don't understand is how to create a new string that each character is the hexacdecimal number (0-F).
thanks!
Upvotes: 1
Views: 2472
Reputation: 1503469
There are a few misconceptions - or at least problematic descriptions - in your post:
You're then calling String.getBytes()
, but it's not clear what encoding you want to use. As stated before, a String is a sequence of characters. To convert that into bytes, you need to apply an encoding. Unfortunately, String.getBytes()
uses the "platform default encoding" which is almost never a good choice. You should always specify which encoding you want to use.
When you have converted the String into bytes (if you definitely want to do that) it's easy to convert that to hex:
for (byte b : test.getBytes("UTF-8"))
{
int x = b & 0xff; // I suspect you don't want negative numbers
System.out.println(Integer.toHexString(b));
}
Alternatively you might want to convert each Unicode character to its hex representation:
for (char c : test.toCharArray())
{
System.out.println(Integer.toHexString(c));
}
Note that Integer.toHexString
doesn't pad its output to a particular number of characters.
If you could give more information about your input and expected output, that would really help.
Upvotes: 5
Reputation: 597382
Hex.encode(byteArray)
Integer.toHexString(..)
for each byteJust be careful when obtaining the bytes. Use the method getBytes(ecnoding)
instead of the one without arguments which takes the platform encoding.
Upvotes: 2
Reputation: 421290
You could do something like
String test = "hello world", result = "";
for (byte b : test.getBytes())
result += Integer.toHexString(b) + " ";
System.out.println(result);
// result = 68 65 6c 6c 6f 20 77 6f 72 6c 64
Keep in mind though, that strings in Java are in unicode.
Upvotes: 7