
[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类将大小转换为人类可读的字符串?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)