MB を B に変換

MB
1000000B

1 MB = 1000000 B

値を入力すると、メガバイトからバイトへの計算が入力に合わせてその場で進みます。1 MB あたり 1000000 B.この比は測って求めたものではなく、定義で決まっています。計算はお使いの端末の中で行われ、入力した数字が通信に乗ることはありません。ただし、そのまわりのページのほうは、ほかのどのページとも同じように広告を読み込みます。

  • 処理される場所 ブラウザーの中です。入力した数値がリクエストに含まれることはありません。
  • 定義として厳密 1MBはちょうど1000000Bです。丸めた係数ではなく、定義です。
  • 入力と同時に答えが出ます ボタンも待ち時間もありません。計算例はスクリプトが動く前からページに載っています。

メガバイトからバイトへ — 実際のところ

  • 5 MB is 5000000 B

    — そこそこのビットレートの曲 1 曲.

  • 4000 MB is 4000000000 B

    — 標準的な画質の映画 1 本.

  • 5 MB is 5000000 B

    — スマートフォンで撮った写真 1 枚.

  • 0.001024 MB is 1024 B

    — 1 キビバイト、ややこしさはここから始まる.

メガバイトからバイトへ — 要点

ここに並ぶ数値は、上の計算機と同じ定義から計算しています。だから表が答えとずれることはありません。
MBB
11000000
22000000
55000000
1010000000
5050000000
100100000000
500500000000
10001000000000

メガバイトとバイト

1 メガバイトは 100 万バイトです。記憶装置のメーカーは昔から十進で数えてきました。だからその数字は、コンピューターが表示する数より大きく見えます。

1 バイトは 8 ビットですが、いつもそう決まっていたわけではありません。初期の計算機は 6 ビット、7 ビット、9 ビットを使っていました。8 が勝ったのは、そこに 1 文字が収まり、しかもその数がきれいに半分ずつ割れるからです。

ここで動くのは小数点だけです

メガバイトからバイトへ移ると、小数点が右へ 6 桁ずれます。ほかには何も変わりません。覚えておく倍率もなければ、丸め方を決める必要もありません。数字は同じ並びのまま、位置だけが動きます。

1,234 MB は 1234000000 B——同じ数字が、ずれただけです。ひと目で検算できる数少ない計算がこれです。結果の数字が始めたときの数字と違っていたら、それを変えたのはこの計算ではありません。

バイトが求められるのは、バイトには方言がないからです

サイズを受け付ける設定形式のほとんどは整数のバイト数を求めます。理由は、この領域の他のあらゆる単位があいまいだからです。バイトはどの体系でもどの慣習でも同じ量ですが、メガバイトは標準化団体やネットワーク技術者にとって 1,000,000 でも、多くのソフトウェアにとって 1,048,576 でもあります。バイトで定義されたフィールドは誤読されようがなく、まさにそれゆえバイトで定義されています。

10 進法のメガバイトからの変換は 100 万を掛けるだけです。1 MB は 1000000、10 MB は 10000000、50 MB は 50000000、512 MB は 512000000。これらはすべてこのページが使う体系ではきりの良い数字ですが、2 進法の単位では半端です。ファイルの中に 52428800 という数字を見つけたとき、それが何を意味していたかを見破る最初の手がかりでもあります。

接尾辞と桁は異なる指示です

10000000 を受け付ける同じフィールドが、しばしば 10M も受け付けますが、この接尾辞は桁の省略形ではありません。nginx は k を 1,024、m を 1,048,576 として読むので、client_max_body_size 10m は 10,485,760 バイトです。PHP も upload_max_filesize や post_max_size、memory_limit で同じように K、M、G を 1,024 のべき乗として扱います。GNU ツール群はこの区別を明示していて、M は 1,048,576、MB は 1,000,000 を意味し、別々の接尾辞です。

この差はメガバイトの規模で 4.9 パーセントあり、レビューをすり抜けるほど小さく、境界では重要になるほど大きい値です。ファイルの中でも見分けが付きません。10M と 10000000 は同じ意図に見えて 485,760 バイトの差があります。設定が両方の形式を受け付けるなら、ファイル全体で一つの慣習を選び、先頭にそう書いておいてください。次にこの数字を編集する人が同じ問いをもう一度解かずに済みます。

それを読み戻すツールで正しく見える体系のきりの良い数字を選ぶ

書くべき値は、チームが見るダッシュボードやログ、エラーメッセージでそのサイズを表示するツールにとって正しく見える数字です。もしダッシュボードがメビバイトでサイズを表示するなら、10485760 はきれいな 10 MiB として表示され、10000000 は 9.54 という、誰かが間違えたように見える数字として表示されます。周囲の文書や顧客向けの上限、マーケティングページがすべて 10 MB と言っているなら、10 進法の数字がそれらを一致させ続けます。

うまくいかないのは、各所で独立に選んでしまうことです。プロキシが 10485760 に、アプリケーションが 10000000 に設定されたスタックには 485,760 バイトの隙間があり、そこではリクエストが最初の検査を通過して二番目で失敗し、返ってくるのは境界でのはっきりした拒否ではなくアプリケーション側のエラーになります。どちらの数字を選ぶかより、経路全体での一貫性のほうが重要です。

リクエストの経路には複数の上限があります

ファイルのアップロードは通常、少なくとも三つの設定された天井を越えます。リバースプロキシやロードバランサーの本体サイズ上限、ランタイムやアプリケーションサーバーの上限、そしてアプリケーション内のフレームワークやストレージ側の上限です。それぞれ別々に、しばしば異なる時期に異なる人によって設定され、いちばん小さいものが実際の挙動を決めます。誰もが知っている値だけを引き上げて残り二つを放置することが、上限の変更が何の効果もないように見えるいちばんよくある理由です。

どこで発動するかは結果だけでなく体験も変えます。エッジでの拒否は、本体のアップロードが終わる前に、速くきれいに届きます。アプリケーション層での拒否はファイル全体の転送が終わったあとに届き、遅い回線では失敗を待つのに何分もかかります。エッジの上限をアプリケーションの上限よりわずかに高く設定しておけば、ユーザーが見るのは役に立つほうのエラーになります。

エンコーディングのオーバーヘッドがファイルより先に上限を食います

上限はリクエスト本体に適用され、リクエスト本体はファイルより大きくなります。マルチパートのフォームデータは各パートを境界行とヘッダーで包み、これはフィールドあたり数百バイトの固定コストで、大きなファイルでは無視できます。Base64 は無視できません。3 バイトごとに 4 文字の印字可能文字に変えるので、JSON の中に運ばれるファイルはおよそ 33 パーセント膨張し、10 MB のファイルはおよそ 13.4 MB の本体として届きます。

ですから 10 MB のファイルを受け付けるつもりの上限は、ファイルサイズではなくエンコード後のサイズから設定すべきです。マルチパートなら数百キロバイトの余裕で十分です。JSON 内の Base64 なら 4/3 を掛けて余裕を足してください。14000000 の上限なら 10 MB のファイルを余裕をもって受け付けますが、10000000 では 7.5 MB を超えるものをすべて拒否し、「上限がおかしい」というバグ報告を生みます。

あとで確認できる形で値を書く

設定ファイルの中の裸の 52428800 という数字は誰にも検証されず、間違った値でも一見正しい値と見分けが付きません。式を許す形式なら 50 1024 1024 と書いて、読む人にその由来を見せてください。リテラルしか許されないなら、その行の上にコメントとして計算過程を書いてください。意図したサイズ、それがどの体系か、その値が一致すべきツールです。

その数字がどこから来たかを記録しておく価値もあります。顧客との契約が 50 MB と定めているから存在する上限と、メモリープロファイルがそう言ったから存在する上限は別のもので、変更される理由も違います。由来の書かれていない設定値は、不用意に引き上げられるか、いつまでも守られ続けるかのどちらかになりがちで、コメントの一文がその両方を防ぎます。

拒否の応答を、自分が書いた値と照らし合わせて読む

サイズを理由にリクエストが拒否されたとき、多くのシステムは設定された上限を、多くは受信したサイズもバイトで報告します。この二つの数字は最速の診断手段です。報告された上限はスタックの中のどれか一つの値と正確に一致するので、どの層が拒否したかが分かり、接尾辞が期待どおりに解釈されたかどうかも確認できます。

ファイルが 10000000 と言っているのに上限が 10485760 と報告されれば、接尾辞が 2 進法で読まれたということです。設定した覚えのない層から上限が報告されれば、天井は思っていた場所にありません。どちらもエラーログの 1 行で見つけられ、少しずつ大きいファイルをアップロードして何かが壊れるまで試すよりずっと簡単です。

MB を B に変換:よくある質問

1 MB は何 B ですか。

1 MB は 1000000 B.画面に出しているのは有効数字 12 桁までです。メガバイトとバイトの比そのものは定義によって決まっている厳密な値で、丸めが入るのは表示のところだけです。

入力した値はどこかへ送られますか。

いいえ。計算はブラウザーの中で行われます。通信を切ったままでも計算は続けられますし、それがいちばん手軽な確かめ方でもあります。

買ったディスクの容量が、書いてある数より少なく表示されるのはなぜですか。

同じ名前の単位が 2 つ動いているからです。メーカーは 1 GB を 1,000,000,000 バイト(10 億バイト)として数えます。一方 Windows が表示しているのはギビバイト、つまり 1,073,741,824 バイトで、それを「GB」と呼んでいます。同じディスクが 7 パーセントほど小さく見えるのはこのためです。消えたものは何もありません。

逆方向:バイトからメガバイトへ

1Bは0.000001MBです。同じ関係を逆から読んだだけなので、一方のページの答えをもう一方に通せば、必ず元の値に戻ります。

この数値の出典

このページがデータ量の単位について述べていることは検証できます。根拠となる資料は次のとおりです。

このページの仕組み

係数はページ内の定数で、計算は四則演算だけです。だからどこにも送信されませんし、送信する必要もありません。入力した数値はブラウザーから出ません。運ぶためのリクエストが存在しないからです。