2004/07
趣味のプログラムでByte配列を扱うことって少ないかもしれませんが、
仕事ではけっこうあります。んじゃソース行ってみよう!!
package jp.gr.java_conf.yamarou.util; import org.apache.commons.lang.StringUtils; /** * byte[]を文字列(10進表現)、文字列(16進表現)、文字列(8進表現)に変換する。 * @author yamarou */ public class ByteUtil { /** * bytesを文字列(10進表現)に変換して返す。 * @param bytes 変換されるバイトデータ * @return 文字列(10進表現) */ public static String toDecimalString(byte[] bytes) { return toString(bytes, 10, 3); } /** * bytesを文字列(16進表現)に変換して返す。 * @param bytes 変換されるバイトデータ * @return 文字列(16進表現) */ public static String toHexString(byte[] bytes) { return toString(bytes, 16, 2); } /** * bytesを文字列(8進表現)に変換して返す。 * @param bytes 変換されるバイトデータ * @return 文字列(8進表現) */ public static String toOctalString(byte[] bytes) { return toString(bytes, 8, 3); } /** * bytesを文字列(radix進表現)に変換してdigit桁で0埋めして返す。 * @param bytes 変換されるバイトデータ * @param radix 基数 * @param digit 0埋めする桁数 * @return 文字列(radix進表現) */ private static String toString(byte[] bytes, int radix, int digit) { if (bytes == null) { return null; } else if (bytes.length == 0) { return null; } StringBuffer buf = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { int n = bytes[i]; if (n < 0) { n += 256; } String s = Integer.toString(n, radix); s = StringUtils.leftPad(s, digit, "0"); buf.append(s); buf.append(","); } buf.deleteCharAt(buf.length() - 1); return buf.toString(); } } package jp.gr.java_conf.yamarou.util; import junit.framework.TestCase; public class ByteUtilTest extends TestCase { public ByteUtilTest(String arg0) { super(arg0); } public static void main(String[] args) { junit.textui.TestRunner.run(ByteUtilTest.class); } final public void testToDecimalString() { byte[] b = { 0x00, 0x05, 0x40, 0x7f, (byte) 0xFF, (byte) 0xEF, (byte) 0x9F, (byte) 0x8F }; String s = ByteUtil.toDecimalString(b); System.out.println(s); assertEquals("000,005,064,127,255,239,159,143", s); } final public void testToHexString() { byte[] b = { 0x00, 0x05, 0x40, 0x7f, (byte) 0xFF, (byte) 0xEF, (byte) 0x9F, (byte) 0x8F }; String s = ByteUtil.toHexString(b); System.out.println(s); assertEquals("00,05,40,7f,ff,ef,9f,8f", s); s = ByteUtil.toHexString(null); assertEquals(null, s); s = ByteUtil.toHexString(new byte[0]); assertEquals(null, s); } final public void testToOctalString() { byte[] b = { 0x00, 0x05, 0x40, 0x7f, (byte) 0xFF, (byte) 0xEF, (byte) 0x9F, (byte) 0x8F }; String s = ByteUtil.toOctalString(b); System.out.println(s); assertEquals("000,005,100,177,377,357,237,217", s); s = ByteUtil.toOctalString(null); assertEquals(null, s); s = ByteUtil.toOctalString(new byte[0]); assertEquals(null, s); } }
org.apache.commons.lang.StringUtilsを使ってます。Jakartaプロジェクトの
サイトからダウンロードしてクラスパスに追加してね!
[実行結果]
000,005,064,127,255,239,159,143
00,05,40,7f,ff,ef,9f,8f
000,005,100,177,377,357,237,217
00,05,40,7f,ff,ef,9f,8f
000,005,100,177,377,357,237,217
1バイト毎にカンマで区切られます。テスト等でByte配列の中身を
見たい時等に使えるでしょう!