objective-c – ObjCCocoa类将大小转换为人类可读的字符串?

objective-c – ObjCCocoa类将大小转换为人类可读的字符串?,第1张

概述有一个简单的方法来做类似的事情。 [NSMagicDataConverter humanStringWithBytes:20000000] ..会返回“19.1MB”? 这里是我自己的问题: enum { kUnitStringBinaryUnits = 1 << 0, kUnitStringOSNativeUnits = 1 << 1, kUnitString 有一个简单的方法来做类似的事情。

[NSMagicdataConverter humanStringWithBytes:20000000]

..会返回“19.1MB”?

解决方法 这里是我自己的问题:

enum {    kUnitStringBinaryUnits     = 1 << 0,kUnitStringOSNativeUnits   = 1 << 1,kUnitStringLocalizedFormat = 1 << 2};Nsstring* unitStringFromBytes(double bytes,uint8_t flags){    static const char units[] = { '
unitStringFromBytes(1073741824,0); // → "1.07 GB"unitStringFromBytes(1073741824,kUnitStringBinaryUnits); // → "1 GB"unitStringFromBytes(1073741824,kUnitStringOSNativeUnits | kUnitStringLocalizedFormat); // → "1.07 GB" (In Mac OS 10.6)unitStringFromBytes(12345678901234567890123456789,kUnitStringOSNativeUnits | kUnitStringLocalizedFormat); // → "12,345.68 YB" (In Mac OS 10.6,in the US)unitStringFromBytes(12345678901234567890123456789,kUnitStringOSNativeUnits | kUnitStringLocalizedFormat); // → "12.345,68 YB" (In Mac OS 10.6,in Spain)
','k','M','G','T','P','E','Z','Y' }; static int maxUnits = sizeof units - 1; int multiplIEr = (flags & kUnitStringOSNativeUnits && !leopardOrGreater() || flags & kUnitStringBinaryUnits) ? 1024 : 1000; int exponent = 0; while (bytes >= multiplIEr && exponent < maxUnits) { bytes /= multiplIEr; exponent++; } NSNumberFormatter* formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setMaximumFractionDigits:2]; if (flags & kUnitStringLocalizedFormat) { [formatter setNumberStyle: NSNumberFormatterDecimalStyle]; } // Beware of reusing this format string. -[Nsstring stringWithFormat] ignores
BOol leopardOrGreater(){    static BOol alreadyComputedOS = NO;    static BOol leopardOrGreater = NO;    if (!alreadyComputedOS) {        SInt32 majorVersion,minorVersion;        Gestalt(gestaltSystemVersionMajor,&majorVersion);        Gestalt(gestaltSystemVersionMinor,&minorVersion);        leopardOrGreater = ((majorVersion == 10 && minorVersion >= 5) || majorVersion > 10);        alreadyComputedOS = YES;    }    return leopardOrGreater;}
,*printf does not. return [Nsstring stringWithFormat:@"%@ %cB",[formatter stringFromNumber: [NSNumber numberWithDouble: bytes]],units[exponent]];}

默认情况下(如果标志传递0),它将输出SI单位(十进制)。您可以设置kUnitStringBinaryUnits选择适合内存的二进制(基本二)单位,或者kUnitStringOSNativeUnits根据 *** 作系统版本自动选择单位类型(pre-Leopard获取基数二,post-Leopard获取十)。设置kUnitStringLocalizedFormat根据用户的当前语言环境格式化字符串。例如:

这是OS本地单元所需的帮助函数:

总结

以上是内存溢出为你收集整理的objective-c – ObjC/Cocoa类将大小转换为人类可读的字符串?全部内容,希望文章能够帮你解决objective-c – ObjC/Cocoa类将大小转换为人类可读的字符串?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1044246.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存