データ変換

【JavaScript】 バイト数とメガバイトの相互変換するプログラム

更新日:2022/08/09

ファイルサイズやデータ容量のバイト数をMBなどの適切な単位に変換、その逆に単位がついたサイズをバイト数に変換するプログラムをJavaScriptで作成します。

ここでは、コードのみ紹介しています。
考え方については、次の記事で紹介しているので読んでみてください。

 

バイト数を適切な単位(メガバイトなど)へ変換

次のコードの関数ByteToUnitは、引数を3つ受け取ります。

  • 一つ目

    変換するバイト数

  • 二つ目

    変換後の小数桁数。省略可能。規定値2

  • 三つ目

    変換後の単位を表す文字列がセットされた配列。省略可能。
    規定値[ ' B' , ' K', ' M' , ' G' , ' T', ' P' ]

JavaScript


const byteToUnit = (bytes,digi = 2 , unit = null )=>{
    bytes = (()=>{ // 引数チェック
        if( typeof bytes === "string" ) {
            if (!/^\d*$/.test(bytes) ) throw new Error("数値ではない");
            return Number( bytes );
        }
        return bytes;
    })();

    unit = unit === null ? [' B', ' K', ' M', ' G', ' T', ' P'] : unit;
    let count = 0;
    while(bytes >= 1024 && count < unit.length){
        bytes /= 1024;
        ++count;
    }
    return bytes.toFixed(digi) + unit[count];
};

最初に受け取ったバイト数が文字列型かどうかをチェックしています。
文字列型なら、文字が数値かどうかチェックして数値型に変換しています。
確実に数値型で受け取れるなら、この部分は必要無いかもしれませんね。

使用方法&実行結果


console.log(byteToUnit(123456)); // 120.56 K
console.log(
    byteToUnit(123456 , 10 ,[' Byte', ' KByte', ' MByte', ' GByte', ' TByte', ' PByte']));
         // 120.5625000000 KByte

 

単位(メガバイトなど)からバイト数への変換

次の関数UnitToByteは、引数として数値の後に単位が続く文字列を受け取ります。

受け取る文字列は、次のようなものを想定しています。

想定1: バイトをBYTESで表現。例) 100MBYTES
想定2: バイトをBYTEで表現。例) 100MBYTE
想定3: バイトをBで表現。例) 100MB

JavaScript


const unitToByte = ( unit )=>{
    unit = unit.toUpperCase();
    const DELETE_STRINGS=[ 'BYTES' , 'BYTE' , 'B' , ' ' , ',' ];
    DELETE_STRINGS.forEach(e=>unit=unit.replaceAll(e,""));

    if( unit.length < 1 ) return 0;

    const lastChar = unit.substring(unit.length-1);
    const UnitTables={ 'K':1 , 'M':2 , 'G':3 , 'T':4 , 'P':5 };
    const powCount =  UnitTables[lastChar] === undefined ? 0 : UnitTables[lastChar];

    const num = unit.substring(0,powCount === 0 ? unit.length : unit.length - 1);
    if( num.length === 0 ) return 0;
    if( !/^(\d*|0)(\.\d+)?$/.test(num) ) throw new Error("数値部が数値でない");

    return powCount === 0 ? parseFloat(num,10) :
        Math.floor(parseFloat(num,10) * Math.pow(1024,powCount));
};

この関数は、数値の部分に数字以外の文字があるときエラーをスローしています。

後から気が付いたのですが、最初にDELETE_STRINGSの文字を強制的に削除しているため、"12B34"などはエラー判定されません。そこまで気にしなくていいと思うので、このままでいきます。

使用方法&実行結果


console.log(unitToByte("123 M")); // 128974848
console.log(unitToByte("123.45 MByte")); // 129446707

更新日:2022/08/09

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。