Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #24488
| Date | 2013-06-20 19:22 +0100 |
|---|---|
| From | lipska the kat <"nospam at neversurrender dot co dot uk"> |
| Organization | Trollbusters 3 |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: convert byte array to hex string using BigInteger |
| References | <kpur29$5v4$1@news.albasani.net> <9hv5s85cul11v42sfop0388joag6mu6t4e@4ax.com> <kpv0a9$gio$1@news.albasani.net> |
| Message-ID | <Y4WdncJquPfF1V7MnZ2dnUVZ8uednZ2d@bt.com> (permalink) |
On 20/06/13 14:32, Laura Schmidt wrote:
> On 06/20/2013 03:09 PM, rossum wrote:
>
>> This is a case of RTFM. The Javadocs for BigInteger(byte[]) tell you
>> that it expects the byte array in two's complement representation, so
>> a leading 1 bit is interpreted as a negative number. You need a
>> different constructor:
>>
>> public BigInteger(int signum, byte[] magnitude)
>
> You are right, sorry.
>
> Now I get a hex string without sign. But now the decode method does not
> return the original bytes anymore:
>
> private byte [] hex_decode (String val)
> {
> BigInteger b = new BigInteger (val,16);
> byte [] t = b.toByteArray();
>
> return (t);
> }
>
> There is no other constructor for byte arrays.
> And I don't really understand why it doesn't return the original byte
> array.
I'm not sure what all this twos compliment stuff is about
twos compliment is just a number representation scheme
There should be no need to 'convert' anything
Anyway
The following program works with the following observation
If the most significant byte is positive e.g >= 1 && <= 127 or 0x7F
the conversion works both ways
If the most significant byte is negative or 0 e.g <= 0 && >= -128 or
0x80 then the conversion works with one proviso
The contract for BigInteger#toByteArray() contains the following text
"The array will contain the minimum number of bytes required to
represent this BigInteger, including at least one sign bit"
so, if the MSB is negative there will be an additional byte in the MSG
position after calling toByteArray set to 0 which indicates that the
following is a positive number, if the MSB is positive there is no need
for an additional byte as the first bit in the MSB is 0 thereby marking
the following number as positive ... interesting, never seen this
before... apart from that it seems to work.
Try changing the byte variable a to a positive number to see the
difference.
<code compiles='yes'>
import java.math.BigInteger;
public class Converter {
private static void printBytes(byte[] val){
for(byte b : val){
System.out.print(b);
System.out.print(' ');
}
System.out.print("\n");
}
private static String hexEncode (byte[] val){
BigInteger b = new BigInteger(1, val);
String t = b.toString(16);
return t;
//Just Say No to this :-)
//return new BigInteger(1, val).toString(16);
}
private static byte[] hexDecode (String val){
BigInteger b = new BigInteger (val, 16);
byte[] t = b.toByteArray();
return t;
}
public static void main(String[] args) {
byte a = -1; //0xFF
byte b = 127; //0x7F
byte c = -128; //0x80
byte d = 64; //0x40
byte e = 16; //0x10
byte f = 99; //0x5A
byte[] val = {a, b, c, d, e, f};
printBytes(val);
String encoded = hexEncode(val);
System.out.println(encoded);
byte[] decoded = hexDecode(encoded);
printBytes(decoded);
encoded = hexEncode(decoded);
System.out.println(encoded);
}
}
</code>
lipska
--
Lipska the Kat©: Troll hunter, sandbox destroyer
and farscape dreamer of Aeryn Sun
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
convert byte array to hex string using BigInteger Laura Schmidt <ls@mailinator.com> - 2013-06-20 14:03 +0200
Re: convert byte array to hex string using BigInteger Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-06-20 09:03 -0400
Re: convert byte array to hex string using BigInteger rossum <rossum48@coldmail.com> - 2013-06-20 14:09 +0100
Re: convert byte array to hex string using BigInteger Laura Schmidt <ls@mailinator.com> - 2013-06-20 15:32 +0200
Re: convert byte array to hex string using BigInteger rossum <rossum48@coldmail.com> - 2013-06-20 15:44 +0100
Re: convert byte array to hex string using BigInteger lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-06-20 19:22 +0100
Re: convert byte array to hex string using BigInteger markspace <markspace@nospam.nospam> - 2013-06-20 11:56 -0700
Re: convert byte array to hex string using BigInteger lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-06-20 20:43 +0100
Re: convert byte array to hex string using BigInteger Lew <lewbloch@gmail.com> - 2013-06-20 13:39 -0700
Re: convert byte array to hex string using BigInteger lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-06-21 08:17 +0100
Re: convert byte array to hex string using BigInteger Arne Vajhøj <arne@vajhoej.dk> - 2013-06-26 22:16 -0400
Re: convert byte array to hex string using BigInteger Joerg Meier <joergmmeier@arcor.de> - 2013-06-20 22:09 +0200
Re: convert byte array to hex string using BigInteger Roedy Green <see_website@mindprod.com.invalid> - 2013-06-21 14:51 -0700
Re: convert byte array to hex string using BigInteger Joerg Meier <joergmmeier@arcor.de> - 2013-06-22 00:26 +0200
Re: convert byte array to hex string using BigInteger Roedy Green <see_website@mindprod.com.invalid> - 2013-06-23 08:49 -0700
Re: convert byte array to hex string using BigInteger Joerg Meier <joergmmeier@arcor.de> - 2013-06-23 22:37 +0200
Re: convert byte array to hex string using BigInteger Roedy Green <see_website@mindprod.com.invalid> - 2013-06-23 12:40 -0700
Re: convert byte array to hex string using BigInteger Joerg Meier <joergmmeier@arcor.de> - 2013-06-23 22:41 +0200
Re: convert byte array to hex string using BigInteger Arne Vajhøj <arne@vajhoej.dk> - 2013-06-26 22:12 -0400
Re: convert byte array to hex string using BigInteger Arne Vajhøj <arne@vajhoej.dk> - 2013-06-26 22:20 -0400
Re: convert byte array to hex string using BigInteger Laura Schmidt <ls@mailinator.com> - 2013-06-28 07:55 +0200
Re: convert byte array to hex string using BigInteger Joerg Meier <joergmmeier@arcor.de> - 2013-06-29 00:01 +0200
Re: convert byte array to hex string using BigInteger Stanimir Stamenkov <s7an10@netscape.net> - 2013-06-29 19:10 +0300
Re: convert byte array to hex string using BigInteger Arne Vajhøj <arne@vajhoej.dk> - 2013-07-03 22:24 -0400
Re: convert byte array to hex string using BigInteger aydin.k.abadi@gmail.com - 2013-11-23 16:40 -0800
Re: convert byte array to hex string using BigInteger aydin.k.abadi@gmail.com - 2013-11-23 16:43 -0800
Re: convert byte array to hex string using BigInteger Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2013-11-24 10:43 +0000
csiph-web