calc / byte

Byte 単位変換

バイト(B)・キロバイト(KB)・メガバイト(MB)・ギガバイト(GB)・テラバイト(TB)を相互変換します。 SI(10進・1KB=1000B)とIEC(2進・1KiB=1024B)の両方に対応しています。

入力単位
プリセット
SI(10進)
1 KB = 1,000 B
B1000000
KB1000
MB1
GB0.001
TB1.0000e-6
IEC(2進)
1 KiB = 1,024 B
B1048576
KiB1024
MiB1
GiB9.7656e-4
TiB9.5367e-7

使い方

01
  1. 数値入力欄に変換したい数値を入力してください
  2. 入力単位ボタン(B / KB / MB / GB / TB)から基準となる単位を選択してください
  3. SI(10進)とIEC(2進)それぞれの換算結果がリアルタイムで表示されます
  4. プリセットボタン(1KB / 1MB / 1GB / 1TB)を使うと素早く一般的な値を入力できます

実装コード

02

外部ライブラリ不要で純粋なTypeScriptのみで実装。乗数テーブルで各単位を定義し、変換と表示フォーマットを純粋関数として分離しています。そのままコピーして利用できます。

export type Unit = 'B' | 'KB' | 'MB' | 'GB' | 'TB'

export type ConvertResult = {
  si: Record<Unit, string>   // SI単位系(10の累乗: 1KB=1000B)
  iec: Record<Unit, string>  // IEC単位系(2の累乗: 1KiB=1024B)
}

const SI_MULTIPLIERS: Record<Unit, number> = {
  B:  1,
  KB: 1_000,
  MB: 1_000_000,
  GB: 1_000_000_000,
  TB: 1_000_000_000_000,
}

const IEC_MULTIPLIERS: Record<Unit, number> = {
  B:  1,
  KB: 1_024,
  MB: 1_048_576,
  GB: 1_073_741_824,
  TB: 1_099_511_627_776,
}

function fmt(n: number): string {
  if (!isFinite(n)) return '—'
  if (n === 0) return '0'
  if (n >= 0.001 && n < 1e15) {
    const s = n.toPrecision(7)
    return parseFloat(s).toString()
  }
  return n.toExponential(4)
}

export function convertBytes(valueStr: string, unit: Unit): ConvertResult | null {
  const num = parseFloat(valueStr)
  if (!isFinite(num) || num < 0) return null

  const bytes    = num * SI_MULTIPLIERS[unit]
  const bytesIEC = num * IEC_MULTIPLIERS[unit]

  const units: Unit[] = ['B', 'KB', 'MB', 'GB', 'TB']
  const si  = {} as Record<Unit, string>
  const iec = {} as Record<Unit, string>

  for (const u of units) {
    si[u]  = fmt(bytes    / SI_MULTIPLIERS[u])
    iec[u] = fmt(bytesIEC / IEC_MULTIPLIERS[u])
  }

  return { si, iec }
}

よくある使用例・注意点

03
SI(10進)とIEC(2進)の違い
SI単位系ではKBは1,000B、MBは1,000,000B(10の累乗)です。一方IEC単位系ではKiBは1,024B、MiBは1,048,576B(2の累乗)です。コンピューター科学では歴史的に1KB=1024Bとして扱われてきたため、両者を混同しやすい点に注意してください。
HDDとOSで容量表示が異なる理由
ハードディスクメーカーはSI単位系(1GB=1,000,000,000B)で容量を表示します。一方WindowsはIEC単位系(1GiB=1,073,741,824B)で表示するため、1TBのHDDはWindowsでは約931GBと表示されます。macOS(10.6以降)はSI単位系を採用しているため「1TB」と表示します。
ネットワーク速度との換算
通信速度のbps(bits per second)をファイル転送速度に換算するには8で割ります(1Byte=8bit)。例えば100Mbps回線の場合、理論上の転送速度は12.5MB/s(SI)です。実際にはプロトコルオーバーヘッドがあるためさらに遅くなります。
プログラムでのメモリ・ストレージ計算
プログラム内でメモリサイズやファイルサイズを扱う場合、OSのAPIが返す値はバイト単位です。人間が読みやすい表示に変換する際はIEC単位系(1024の累乗)を使うのが一般的ですが、ストレージ容量の表示にはSI単位系を使うケースが増えています。用途に応じて明示的に区別してください。

関連ツール

04
進数変換ハッシュ生成文字数カウンター

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →