码迷,mamicode.com
首页 > 其他好文 > 详细

Byte/KB/MB/GB 等字节单位换算

时间:2014-10-20 23:22:06      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:c++

字节单位换算公式:

  1. 1 GB = 1024 MB
  2. 1 MB = 1024 KB
  3. 1 KB = 1024 Bytes
  4. 1 Byte = 8 bits
将字节单位转化为目标单位

根据公式我写了一段C++代码,用于将输入的以字节为单位的数值,转换为目标单位数值。代码中的枚举类型用的是C++11的语法。

  1. enum class Unit{
  2. Byte, KB, MB, GB, TB, PB, EB
  3. };
  4. double convert(double size, Unit unit)
  5. {
  6. double result = size;
  7. switch (unit)
  8. {
  9. case Unit::EB:
  10. result /= 1024; // flow through
  11. case Unit::PB:
  12. result /= 1024; // flow through
  13. case Unit::TB:
  14. result /= 1024; // flow through
  15. case Unit::GB:
  16. result /= 1024; // flow through
  17. case Unit::MB:
  18. result /= 1024; // flow through
  19. case Unit::KB:
  20. result /= 1024; // flow through
  21. case Unit::Byte:
  22. result /= 1;
  23. default:
  24. break;
  25. }
  26. return result;
  27. }

测试代码:

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. double size = 2.4 * std::pow(1024, 3); // 2.4GB
  7. cout << convert(size, Unit::Byte) << "Byte" << endl;
  8. cout << convert(size, Unit::KB) << "KB" << endl;
  9. cout << convert(size, Unit::MB) << "MB" << endl;
  10. cout << convert(size, Unit::GB) << "GB" << endl;
  11. cout << convert(size, Unit::TB) << "TB" << endl;
  12. cout << convert(size, Unit::PB) << "PB" << endl;
  13. cout << convert(size, Unit::EB) << "EB" << endl;
  14. return 0;
  15. }

运行结果:

  1. 2.57698e+009Byte
  2. 2.51658e+006KB
  3. 2457.6MB
  4. 2.4GB
  5. 0.00234375TB
  6. 2.28882e-006PB
  7. 2.23517e-009EB
将字节单位转化为合适的单位

上面的代码中必须指定目标单位,但很多时候我不知道目标单位,只要转化后的单位看上去比较合理(数值介于1-1024之间)即可,所以又写了下面这段代码,输入以字节为单位的数值,返回一个二元组,该而二元组包含了转换后的大小以及单位。

  1. std::pair<double, Unit> convert(double size)
  2. {
  3. std::pair<double, Unit> result = std::make_pair(size, Unit::Byte);
  4. while (result.first >= 1024)
  5. {
  6. result.first /= 1024;
  7. result.second = static_cast<Unit>(1 + static_cast<int>(result.second));
  8. }
  9. return result;
  10. }

测试代码:

  1. std::pair<double, Unit> result = convert(size);
  2. cout << result.first; // 输出结果: 2.4GB
  3. switch (result.second)
  4. {
  5. case Unit::Byte:
  6. cout << "Byte" << endl; break;
  7. case Unit::KB:
  8. cout << "KB" << endl; break;
  9. case Unit::MB:
  10. cout << "MB" << endl; break;
  11. case Unit::GB:
  12. cout << "GB" << endl; break;
  13. case Unit::TB:
  14. cout << "TB" << endl; break;
  15. case Unit::PB:
  16. cout << "PB" << endl; break;
  17. case Unit::EB:
  18. cout << "EB" << endl; break;
  19. default: break;
  20. }

Byte/KB/MB/GB 等字节单位换算

标签:c++

原文地址:http://blog.csdn.net/xiaohui_hubei/article/details/40323757

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!