C++ 正确或完全错误地将B转换为MB
我对这些事情不是很有经验,所以请不要一开始就下结论。好的,我有一个以字节为单位的数字,我一直试图转换成mb,但一致性和成功率都很低。例如,当我“获取信息”时,我的目录返回19191字节(191.919 MB) 我很好奇如何自己转换它,所以我学到了以下几点: 谷歌: 1KB=1000B 1 MB=1000 KB 1 GB=1000 MB 到目前为止还不错 1024000字节(KB=1024) 1024 KB,MB=1.024 这似乎完全合乎逻辑 这看起来也很正确,但当我使用现有的大部分代码样本将字节转换为mb时,我最终得到的结果与友好的google完全不同 因此,有了这些信息:C++ 正确或完全错误地将B转换为MB,c++,objective-c,c,int,C++,Objective C,C,Int,我对这些事情不是很有经验,所以请不要一开始就下结论。好的,我有一个以字节为单位的数字,我一直试图转换成mb,但一致性和成功率都很低。例如,当我“获取信息”时,我的目录返回19191字节(191.919 MB) 我很好奇如何自己转换它,所以我学到了以下几点: 谷歌: 1KB=1000B 1 MB=1000 KB 1 GB=1000 MB 到目前为止还不错 1024000字节(KB=1024) 1024 KB,MB=1.024 这似乎完全合乎逻辑 这看起来也很正确,但当我使用现有的大部分代码样本将
191.919 mb / (1024000) = 187.421 B
我也见过这样的转换:
191.919 mb / (1024 * 1024) = 183.028 B
WTF?这是我们一直在做的事情,还是有一些标准的方法可以从字节中得到真正的文件大小(mb)?由于这些相互矛盾的信息,我现在完全不知所措。我真的不知道谁是对的,谁是错的,或者我完全错过了什么
我有这样的代码:
UInt32 fileSize = 191919191; // size in bytes
UInt32 mbSize = fileSize / 1024000; // do conversion
printf(@"%u MB",(unsigned int)mbSize); // result:
哪些产出:
187 MB
那么19191字节=191MB究竟怎么可能呢?总结一下
- 国际标准化的官方正确前缀用法是kilo=10^3=1000,mega=10^6=1000000等等。缩写为K、M、G等
- 数字世界有一组单独的前缀,其中kibi=2^10=1024,mebi=2^20=1048576等等。缩写是Ki、Mi、Gi等等
- 在流行用法中,缩写K、M、G等略显模糊,有时理解为一种意思,有时理解为另一种意思
底线是,无论什么时候重要,你都必须格外小心,知道你在用什么。一些文档不会注意到这一点,可能会产生误导。我认为这种模糊性不会很快改变。@quantdev,在我的问题中点击谷歌链接。什么是对的?我想知道-我的系统返回的结果与谷歌的结果相同。在维基百科上查找显示,它可以引用二进制值(1000^2)或十进制值(1024^2)。@quantdev:没有错。KB、MB、GB等的定义存在冲突。@quantdev:我也是。我正在尝试重新调整自己,改用Kibibytes、Mebibytes和Gibibytes,因为我更喜欢正确使用SI前缀。@BenjaminLindley要花很长时间才能找到它,但你引用的真实姓名描述的是1024而不是1000的倍数,这让我想起了几年前我在另一个留言板上看到的一篇文章,在这篇文章中,作者声称,除其他行业通俗的原因外,你从来没有听到有人说kibibyte,mebibyte,其中一个原因是它在没有听起来像工具的情况下是不可能使用的。我不得不笑了。谢谢你唤起了我的回忆
187 MB