内容长度转换

时间:2012-11-15 11:18:51

标签: php macos file curl size

我正在使用一个脚本来检查文件大小,该脚本报告BYTES中的内容长度与我在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 TV Ad Tune.m4r

  • 字节(Mac):4,27,840字节
  • KBs(Mac):428KB

  • 字节(脚本):427840

  • KBs(脚本):417.81 KB

我想知道它的脚本或其他什么原因引起了这种差异?

谢谢!

3 个答案:

答案 0 :(得分:4)

看起来Mac正在使用1000惯例,即1kB是1000字节。您的转换使用1kB = 1024字节。两者在技术上都是正确的,但大多数程序员将使用1kB = 1024.Mac使用1kB = 1000,Windows使用1kB = 1024.

硬盘制造商将使用1000惯例,因此他们可以在广告时使用更大的数字,这就是为什么我在我的机器上安装的1TB硬盘被列为在Windows中只有931千兆字节。

我在检查代码中的文件大小时的建议是始终使用字节,因为这样可以避免这种差异并且更加便携。

答案 1 :(得分:1)

也许您正在比较磁盘上的大小(在Mac上)和脚本大小转换。磁盘上的大小取决于您的硬盘驱动器分区块大小。

如果真实大小为417.81 KB且你的团队大小为200 KB(这不是一个真实的例子),那么你在磁盘上的大小将是600 KB。

磁盘上的大小不是您文件的实际大小,而是磁盘上文件占用的大小。

希望这可能会有所帮助。

答案 2 :(得分:0)

似乎差异是由转换引起的。你做1 KB = 1024 B,而Mac似乎做1KB = 1000 B。