便利なコードパーツ集!

やまろうのプログラミングTips

Java

[Java] Byte配列の中身を見る方法

投稿日:

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

1バイト毎にカンマで区切られます。テスト等でByte配列の中身を
見たい時等に使えるでしょう!

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2024 AllRights Reserved Powered by AFFINGER4.