Heim > Backend-Entwicklung > PHP-Tutorial > 将字节数转换成用户可读的格式_2

将字节数转换成用户可读的格式_2

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-20 12:27:39
Original
1267 Leute haben es durchsucht

=Start=

接上篇「 将字节数转换成用户可读的格式」,上篇文章主要是使用Linux下已有的工具(numfmt,需要 GNU coreutils >= 8.21)进行转换,但是我记录这篇文章的最初目的是自己编码实现相关功能(比如写成一个alias/function放在.bashrc中方便日常使用),这篇文章的内容就是介绍通过各种编程语言来实现该功能。

参考解答:

1.awk/gawk

# OKecho "12454162221" | awk '    BEGIN {       split("B,KB,MB,GB,TB", Units, ",");    }    {       u = 1;       while ($1 >= 1024) {          $1 = $1 / 1024;          u += 1       }       $1 = sprintf("%.2f %s", $1, Units[u]);       print $0;    }' # OKecho "12454162221" | gawk 'BEGIN { split("KMGTPEZY",suff,//)}{  match($0,/([0-9]+)/,bits)  sz=bits[1]+0  i=0; while ((sz>1024)&&(i<length(suff))) { sz/=1024;i++ }  if (i) printf("%.3f %siB\n",sz,suff[i])  else   printf("%3i B\n",sz)}' # OKecho "12454162221" | awk '{  xin=$1;  if(xin==0) {    print "0 B";  } else {    x=(xin<0?-xin:xin);    s=(xin<0?-1:1);    split("B KiB MiB GiB TiB PiB",type);    for(i=5;y < 1;i--) {      y=x/(2^(10*i));    }    print y*s " " type[i+2];  };}'
Nach dem Login kopieren

2.Perl

echo "12454162221" | perl -ne 'if (/^(\d+)/){$l=log($1+.1);$m=int($l/log(1024)); printf("%6.1f\t%s\n",($1/(2**(10*$m))),("K","M","G","T","P")[$m-1]);}' # 最大以G为单位echo "12454162221" | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e'
Nach dem Login kopieren

3.Python

defbytes_format(filesize, unit=1024):    unit = float(unit)    for countin ['Bytes','KB','MB','GB', 'TB', 'PB']:        if 0 < filesize < unit:            return '{0:.3f} {1}'.format(filesize, count)        filesize /= unit printbytes_format(12454162221)
Nach dem Login kopieren

4.PHP

<?php function bytes_format($numbers, $bytesize = 1024) {  $readable = array("",  "KB", "MB", "GB", "TB", "PB");  $index = 0;  while($numbers > $bytesize){      $numbers /= $bytesize;      $index++;  }  return("".round($numbers, 2)." ".$readable[$index]);}echobytes_format(12454162221) . "\n";echobytes_format(124541622210) . "\n";echobytes_format(1245416222100) . "\n";
Nach dem Login kopieren

参考链接:

  • http://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1
  • http://stackoverflow.com/questions/15854332/file-size-in-human-readable-format
  • http://www.kossboss.com/linux—bytes-to-human-readable-command
  • http://ram.kossboss.com/humanbytesawk/
  • http://ram.kossboss.com/linux-bytes-to-human-readable-command/
  • http://superuser.com/questions/553976/how-to-display-the-size-in-human-readable-format-in-the-find-command/554027#554027
  • http://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size
  • http://codesnippets.fesslersoft.de/format-bytes-to-human-readable-size/
  • http://www.developerfeed.com/how-convert-bytes-human-readable-string-format-php/
  • http://www.ivankristianto.com/tips-convert-your-numbers-to-human-readable-format/

=END=

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage