JavaScriptでASCII文字列と16進数を相互変換するコンバータークラスの実装方法
課題
今回は、以下の2つのメンバー関数を持つJavaScriptクラスを作成する必要があります。
- toHex: ASCII文字列を受け取り、それに対応する16進数の文字列を返します。
- toASCII: 16進数の文字列を受け取り、それに対応するASCII文字列を返します。
たとえば、関数への入力が次のようになっているとします。
入力
const str = 'this is a string';
この場合、変換後の16進数とASCII文字列はそれぞれ以下のようになります。
74686973206973206120737472696e67
this is a string
変換の仕組み
ASCIIから16進数への変換では、各文字に対してcharCodeAt()メソッドで文字コード(数値)を取得し、toString(16)で16進数表記の文字列に変換します。逆に、16進数からASCIIへの変換では、16進数文字列を2文字ずつ区切り、parseInt(el, 16)で数値に戻した上で、String.fromCharCode()により対応する文字を取得します。
実装例
const str = 'this is a string';
class Converter{
toASCII = (hex = '') => {
const res = [];
for(let i = 0; i < hex.length; i += 2){
res.push(hex.slice(i,i+2));
};
return res
.map(el => String.fromCharCode(parseInt(el, 16)))
.join('');
};
toHex = (ascii = '') => {
return ascii
.split('')
.map(el => el.charCodeAt().toString(16))
.join('');
};
};
const converter = new Converter();
const hex = converter.toHex(str);
console.log(hex);
console.log(converter.toASCII(hex));
出力結果
このコードを実行すると、コンソールには以下のように出力されます。
74686973206973206120737472696e67
this is a string
コードのポイント
- toHexメソッド:
split('')で文字列を1文字ずつの配列に分解し、各文字を16進数に変換した後、join('')で連結しています。 - toASCIIメソッド:16進数は1文字(2桁)につき2文字分の長さを持つため、
slice(i, i+2)で2文字ずつ取り出して処理しています。 - どちらのメソッドもデフォルト引数として空文字を設定しているため、引数なしで呼び出してもエラーになりません。
このように、クラスとして実装することで、変換処理を再利用しやすく、コードの保守性も向上します。データのエンコード・デコード処理など、さまざまな場面で活用できる実装です。
-
HTMLとJavaScriptで作る重量コンバーター:kgをgに変換する方法
HTMLとJavaScriptを組み合わせれば、ブラウザ上で動作するシンプルな重量コンバーター(単位変換ツール)を簡単に作成できます。この記事では、キログラム(kg)を入力するとグラム(g)に自動変換して表示するウェイトコンバーターの実装方法を、サンプルコードとともにわかりやすく解説します。 実装コード例 以下のコードをそのままHTMLファイルとして保存し、ブラウザで開くだけで動作します。 <!DOCTYPE html> <html> <head> <style> body{  
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod