[解決済み] Javaでバイト配列から16進文字列に変換する方法は?
2022-03-14 07:45:53
質問
16進数で埋め尽くされたバイト配列があるのですが、印刷できない要素が多いので、簡単な方法で印刷しても意味がないのです。私が必要とするのは、正確な16進数のコードで、以下のような形式です。
3a5f771c
どのように解決するのですか?
ディスカッションより こちら そして、特に これ という質問に対して、私が現在使っている機能です。
private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}
私自身の小さなベンチマーク(100万バイトを1000回、256バイトを1000万回)では、他のどの選択肢よりもずっと速く、長い配列では約半分の時間で済むことがわかりました。 私が参考にした回答と比較すると、ディスカッションで提案されたビット演算に切り替えることで、長い配列の処理時間を約20%短縮することができました。(Edit: 私が「他の方法より速い」と言ったのは、ディスカッションで提案された代替コードのことです。性能は、非常に似たコードを使用しているCommons Codecと同等です)。
2k20版、Java9コンパクト文字列を基準にしています。
private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
public static String bytesToHex(byte[] bytes) {
byte[] hexChars = new byte[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars, StandardCharsets.UTF_8);
}
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] JavaでInputStreamをバイト配列に変換する
-
[解決済み] 16進ダンプの文字列表現をバイト配列に変換する Javaを使用する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Exceptionが発生しました エラー解決
-
jd-gui Java Exceptionが発生しました。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
javaの模造品QQ WeChatのチャットルーム
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] Javaで、バイト配列を先頭のゼロを維持したまま16進数の文字列に変換するにはどうしたらいいですか?[重複しています]。