String または byte[]をデバッグ目的で16進に変換するには、1文字ずつ処理すればいいのですが、ヘキサ表示なんてだれもが行うものですからすでにライブラリ化されていないでしょうか?

sun.misc.HexDumpEncoder クラスは見つけたのですが、このほかに16進変換に使えるクラスはありませんでしょうか。(apache-commonsなら安心して使えるのでうれしいです)

HexDumpEncoder encoder = new HexDumpEncoder();
String encoded = encoder.encode("abcde".getBytes());
System.out.println(encoded);
出力
0000: 61 62 63 64 65

希望としては 0000:  は不要なので
61 62 63 64 65
6162636465
0x6162636465
などに変換できると助かります。

A 回答 (1件)

IntegerクラスのtoHexString()メソッドでは、だめですか。


(私は、結果の気に入らない部分は適当に加工します。)

この回答への補足

toHexStringを使う場合次のような感じになると思うのですが、毎度実装するのが面倒なのと、符号の考慮を忘れがちなので、できればライブラリを使いたいと思っています。

  static String toHexString(String str, String encode) {
    byte[] bytes = str.getBytes(encode);
    StringBuilder sb = new StringBuilder();
    for (byte b : bytes) {
      int i = b;
      if(i<0) i+=256; // 符号の考慮
      String hex = Integer.toHexString(i).toUpperCase();
      sb.append(hex);
      sb.append(' ');
    }
    return sb.toString();
  }

補足日時:2008/01/27 00:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Qクラスのcolor 「#ff0000;」を表示

CSSのクラスsampleのcolor 「#ff0000;」を表示する方法を教えてください。


// cssの部分
.sample {
   color: #ff0000;




// html内 JavaScriptの部分
<script type="text/javascript">
function () {
var element = document.getElementById("sample");
var samplecolor = element.style.color;
}
</script>

<span id="samplecolor"></span>




//----------結果-------------------

#ff0000;

Aベストアンサー

質問文の例では#ff0000になり得ないので、適宜脳内変換します。


getComputedStyle(document.getElementById('sample'), '').color;


getComputedStyleについてはこちらが詳しいと思います。
http://d.hatena.ne.jp/amachang/20070611/1181554170


ただし、ブラウザが内部で保持している値ですので、色情報の場合は、
#ff0000(16進数、小文字)
#FF0000 (16進数、大文字)
rgb(256, 0, 0) (RGB値)

等々、ブラウザ、バージョンごとに異なります。
(各ブラウザの最新バージョンでは統一されていると思いますが。)

この点がelement.styleと異なります。
element.styleは代入したそのままの値を取得できます。

element.style.color='#ff0000';
alert( element.style.color); // "#ff0000"
alert( getComputedStyle(element, '').color); //"rgb(256, 0, 0)"

getComputedStyleのメリットは、style属性に書いていなかったり、styleプロパティに代入していなくても値がとれることにあります。


CSSファイルの内容を直接解析したいのであれば、cssRuleを使用してください。
https://developer.mozilla.org/en/DOM:cssRule.style

質問文の例では#ff0000になり得ないので、適宜脳内変換します。


getComputedStyle(document.getElementById('sample'), '').color;


getComputedStyleについてはこちらが詳しいと思います。
http://d.hatena.ne.jp/amachang/20070611/1181554170


ただし、ブラウザが内部で保持している値ですので、色情報の場合は、
#ff0000(16進数、小文字)
#FF0000 (16進数、大文字)
rgb(256, 0, 0) (RGB値)

等々、ブラウザ、バージョンごとに異なります。
(各ブラウザの最新バージョンでは統一されていると思いま...続きを読む

QMap Hash = new Hash

Map<String, String> Hash = new HashMap<String, String>();

このjavaのハッシュマップの初期化の方法を教えてください。

Aベストアンサー

2回目?
1回目と同じですよ。

Map<String, String> Hash = new HashMap<String, String>(); //1回目
Hash = new HashMap<String, String>(); //2回目
Hash = new HashMap<String, String>(); //3回目
Hash = new HashMap<String, String>(); //4回目
//このあとも好きなだけどうぞ・・

なにか質問の意味を勘違いしてますかね?

QStringの文字列をString[]配列に変換したい

お世話になります♪

たとえばこういうStringの文字列があるとします。
String s = "私は Javaを 勉強 しています。";
これを下記のようなイメージでString[]配列に変換したいのですが、
{"私は","Javaを","勉強","しています。"};

何かいい方法はないでしょうか?
ヒントをください!

よろしくお願いします。

Aベストアンサー

java.util.StringTokenizerで区切り文字を半角スペースで使用して、
hasMoreTokens()をwhileで回しながらそのループ中で配列に投入してはどうですか?

Q「String arr[]」 と「String[] arr」の違いは?

「String[] arr」の方が良い理由も教えてください。

Aベストアンサー

String arr[]
はStringクラスの変数がいっぱい
という解釈ね。

String[] arr
はString[] の変数arrを意味するわ。

内部的な処理は同じだけど見た目が違うの。
Javaでは配列も一つのオブジェクトとして扱っているため
String[]クラスのインスタンスであるarrという表現の方がJavaっぽい
という回答になるかな。

蛇足だけど
表現を統一しておけば何かと便利よね。


人気Q&Aランキング

おすすめ情報