2012-11-15 2 views
3

내가 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에서 보는 것과 다릅니다.

그래서 예 :

윈도우 8 TV 광고 Tune.m4r

  • 바이트 (맥) : 4,27,840 바이트
  • KB 크기 (맥) : 428킬로바이트

  • 바이트 (스크립트) : 427840

  • KB (스크립트) : 417.81 KB

이 차이점을 일으키는 스크립트 또는 다른 것이 있는지 궁금합니다.

감사합니다.

답변

4

Mac이 1000 회의 규칙을 사용하고있는 것처럼 보입니다. 즉 1kB는 1000 바이트입니다. 귀하의 변환은 1kB = 1024 바이트를 사용하고 있습니다. 둘 다 기술적으로 정확하지만 대부분의 프로그래머는 1kB = 1024를 사용합니다. Mac은 1kB = 1000을 사용하고 Windows는 1kB = 1024를 사용합니다.

하드 드라이브 제조업체는 1000 회의 규칙을 사용하므로 광고 할 때 더 큰 숫자를 사용할 수 있습니다. 내 컴퓨터에 1TB 하드 드라이브를 설치 한 이유는 Windows에 931GB 밖에없는 이유입니다.

코드에서 파일 크기를 확인할 때 권장되는 사항은 바이트를 항상 사용하는 것입니다. 이렇게하면이 불일치가 방지되고 이식성이 향상됩니다.

+1

또한 파일에 포함 된 데이터의 바이트 수와 주어진 시스템에서 차지하는 디스크 공간의 차이 (파일 시스템 유형에 따라 달라질 수 있음 - FAT32, NTFS , HFS +, ext3 등 - 및 ​​구성). –

0

차이점은 변환 때문인 것 같습니다. 1KB = 1024B이고 Mac은 1KB = 1000B를 수행하는 것 같습니다.

1

디스크의 크기 (Mac의 경우)와 스크립트 크기 변환을 비교했을 수 있습니다. 디스크의 크기는 하드 드라이브 파티션 블록 크기에 따라 다릅니다.

실제 크기가 417.81KB이고 블록 크기가 200KB 인 경우 (실제 예제가 아님) 디스크의 크기는 600KB가됩니다.

디스크의 크기는 파일의 실제 크기가 아니라 디스크에서 파일이 차지하는 크기입니다.

희망 사항. 도움이 될 수 있습니다.

+1

다른 파일 시스템 (동일한 크기의 파일 시스템에서도 블록 크기에 대한 형식 지정 옵션)은 동일한 파일에서 다른 시스템의 다른 공간을 차지하게됩니다. –

관련 문제