src/share/classes/java/lang/Integer.java
Print this page
rev 10110 : 8050114: Expose Integer/Long formatUnsigned methods internally
Reviewed-by: mduigou
@@ -317,28 +317,31 @@
// Use special constructor which takes over "buf".
return new String(buf, true);
}
/**
- * Format a long (treated as unsigned) into a character buffer.
+ * Format an {@code int} (treated as unsigned) into a character buffer. If
+ * {@code len} exceeds the formatted ASCII representation of {@code val},
+ * {@code buf} will be padded with leading zeroes.
+ *
* @param val the unsigned int to format
* @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
* @param buf the character buffer to write to
* @param offset the offset in the destination buffer to start at
* @param len the number of characters to write
- * @return the lowest character location used
*/
- static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
- int charPos = len;
+ static void formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
+ // assert shift > 0 && shift <=5 : "Illegal shift value";
+ // assert offset >= 0 && offset < buf.length : "illegal offset";
+ // assert len > 0 && (offset + len) <= buf.length : "illegal length";
+ int charPos = offset + len;
int radix = 1 << shift;
int mask = radix - 1;
- do {
- buf[offset + --charPos] = Integer.digits[val & mask];
+ while (charPos > offset) {
+ buf[--charPos] = Integer.digits[val & mask];
val >>>= shift;
- } while (val != 0 && charPos > 0);
-
- return charPos;
+ }
}
final static char [] DigitTens = {
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'1', '1', '1', '1', '1', '1', '1', '1', '1', '1',