2012-11-15 119 views
3

我使用一個腳本,報告內容的字節長度相匹配的正是我看到我的Mac上檢查文件的大小,但如果我將字節轉換爲KB的:內容長度變換

function formatBytes($bytes, $precision = 2) { 
    $units = array('B', 'KB', 'MB', 'GB', 'TB'); 

    $bytes = max($bytes, 0); 
    $pow = floor(($bytes ? log($bytes) : 0)/log(1024)); 
    $pow = min($pow, count($units) - 1); 

    $bytes /= (1 << (10 * $pow)); 

    return round($bytes, $precision) . ' ' . $units[$pow]; 
} 

。 .. KB的大小總是不同於我在Mac上看到的大小。

所以例如:

的Windows 8電視廣告Tune.m4r

  • 字節(蘋果機):4,27,840字節
  • 知識庫系統(蘋果機):428KB

  • 字節(腳本):427840

  • KBs(腳本):417.81 KB

我不知道它的腳本或其他什麼引起這種差異?

謝謝!

回答

4

它看起來像Mac使用1000約定,即1kB是1000字節。您的轉換使用1kB = 1024個字節。兩者都是技術上是正確的,但大多數程序員會使用1KB = 1024 Mac使用1KB = 1000,和Windows使用1KB = 1024

硬盤製造商將使用1000約定,以便他們可以使用更大的數字時廣告,這是爲什麼我在我的機器上安裝的1 TB硬盤驅動器在Windows中僅列爲931千兆字節。

我在檢查代碼中的文件大小時的建議是始終使用字節,因爲這樣可以避免這種差異,並且更便於攜帶。

+1

我還考慮到文件中包含的數據字節數以及給定系統上佔用的磁盤空間有多少(這取決於文件系統類型 - FAT32,NTFS ,HFS +,ext3等 - 和配置)。 –

0

看起來差異是由轉換引起的。你做1 KB = 1024 B,而Mac似乎做1KB = 1000 B.

1

也許你正在比較磁盤上的大小(在Mac上)和腳本大小轉換。磁盤上的大小取決於您的硬盤分區大小。

如果真實大小爲417.81 KB,並且您的區塊大小爲200 KB(這不是一個真實示例),那麼您的磁盤大小將爲600 KB。

磁盤上的大小不是您的文件的實際大小,而是您的文件在磁盤上佔用的大小。

希望這可能有所幫助。

+1

不同的文件系統(甚至在相同大小的文件系統上的塊大小的格式化選項)也會導致相同的文件在不同的系統上佔用不同的空間量。 –