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配列の中身を
見たい時等に使えるでしょう!