Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Simple md5 question - leading zeros

Posted on 2004-09-19
8
Medium Priority
?
529 Views
Last Modified: 2008-01-16
hi,

I have come across this code at many places on net

StringBuffer hexString = new StringBuffer();
for (int i=0; i < digest.length; i++) {
    String hex = Integer.toHexString(0xFF & digest[i]);
    if (hex.length() == 1) {
        hexString.append("0" + hex);
    } else {
        hexString.append(hex);
    }
}

my question is -- what's the use of doing
0xFF & digest[i]

Thnx...
0
Comment
Question by:kumvjuec
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
8 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 12096622
That would be to 'unsign' the byte value, which of course is a signed type
0
 
LVL 3

Author Comment

by:kumvjuec
ID: 12096633
thnx cehj, can u explain li'l more...

how can a byte value be signed.. and how this operation will make difference
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12096856
It's actually not only to unsign it - it's to ensure the value does not exceed 0xFF after being passed to Integer.toHexString. Let's assume that digest[i] is itself 0xFF (-1)

Integer.toHexString(0xFF)

would produce

"ffffffff"

because of 'sign extension'. ANDing 0xFF with 0xFF would produce as a hex int

000000FF, and when that int is passed to Integer.toHexString, you'd get

"ff", which is what you want
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 3

Author Comment

by:kumvjuec
ID: 12096928
cehj,
can u also give me a code to demonstrate this. I tried
"System.out" ing the Integer.toHexString(0xff) and Integer.toHexString(0xff & 0xff)
but both are printing out the same thing
i.e 0xff

Thanks,
0
 
LVL 3

Author Comment

by:kumvjuec
ID: 12096934
sorry, they are printing out ff instead.
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 12097008
That's because you're using an integer literal instead of a byte and those values will not be sign extended. Try this

byte b = (byte)0x80; // (-128)
System.out.println(Integer.toHexString(b));
0
 
LVL 3

Author Comment

by:kumvjuec
ID: 12097020
thnx cehj
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12097062
8-)

Rather than calling Integer.toHexString, you may find the following more efficient:

            System.out.println(byteArrayToHexString(new byte[] { (byte)0xca, (byte)0xfe, (byte)0xba, (byte)0xbe}));

...........

            public static String byteArrayToHexString(byte[] rawBytes) {
                  String charIndex = "0123456789abcdef";
                  StringBuffer sb = new StringBuffer(rawBytes.length * 2);
                  for (int i = 0; i < rawBytes.length; i++) {
                        int ix = (rawBytes[i] >> 4) & 0xF;
                        sb.append(charIndex.charAt(ix));
                        ix = rawBytes[i] & 0xF;
                        sb.append(charIndex.charAt(ix));
                  }
                  return sb.toString();
            }
0

Featured Post

The top UI technologies you need to be aware of

An important part of the job as a front-end developer is to stay up to date and in contact with new tools, trends and workflows. That’s why you cannot miss this upcoming webinar to explore the latest trends in UI technologies!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
Suggested Courses

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question