JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでASCII文字列を16進数に変換する方法

JavaScriptでは、文字列として与えられたASCIIコードを、対応する16進数(ヘックス)コードへ変換する関数を簡単に実装できます。本記事では、文字列を受け取り、その各文字に対応する16進数コードを連結して返す関数の作り方を解説します。

変換の仕組み

例えば、入力となるASCII文字列が次の通りだとします。

const str = '159';

この場合、各文字の文字コードを16進数に変換すると、出力は「313539」になります。具体的な対応関係は以下の通りです。

  • '1' の文字コードは 49(10進数)→ 31(16進数)
  • '5' の文字コードは 53(10進数)→ 35(16進数)
  • '9' の文字コードは 57(10進数)→ 39(16進数)

実装例

以下が実際のコードです。

const str = '159';
const convertToHexa = (str = '') => {
  const res = [];
  const { length: len } = str;
  for (let n = 0, l = len; n < l; n++) {
    const hex = Number(str.charCodeAt(n)).toString(16);
    res.push(hex);
  }
  return res.join('');
}
console.log(convertToHexa('159'));

コードの解説

この関数の処理の流れは以下の3ステップです。

  1. charCodeAt():文字列内の指定位置にある文字の文字コード(ASCII文字の場合はASCIIコードと同じ値)を10進数の数値として取得します。
  2. toString(16):取得した数値を、基数16を指定することで16進数の文字列に変換します。
  3. join(''):配列に格納されたすべての16進数文字列を空文字で区切って結合し、最終的な結果として返します。

出力結果

コンソールには次のように出力されます。

313539

補足:大文字表記や桁揃えが必要な場合

用途によっては、16進数を大文字で統一したり、常に2桁に揃えたりしたいケースもあります。その場合は toUpperCase()padStart(2, '0') を組み合わせると便利です。

const hex = str.charCodeAt(n).toString(16).padStart(2, '0').toUpperCase();

このように書き換えることで、「01」「0A」のような整形された16進数表記を得られ、データの可読性や整合性も向上します。

  1. JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方

    JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時

  2. JavaScriptで配列をSet(セット)に変換する方法

    JavaScriptで配列をSetに変換するときの基本JavaScriptでは、Setオブジェクトを使うことで、配列から重複しない一意の値だけを持つコレクションを簡単に作成できます。SetはES6(ECMAScript 2015)で導入された組み込みオブジェクトで、同じ値が複数回追加されても自動的に1つにまとめられるのが特徴です。変換自体は非常にシンプルで、new Set(配列)と書くだけで完了します。コード例:配列からSetへの変換以下は、重複を含む配列をSetに変換して画面に表示するサンプルコードです。<!DOCTYPE html> <html lang=ja> &