码迷,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. };
    1. double convert(double size, Unit unit)
    2. {
    3. double result = size;
    4. switch (unit)
    5. {
    6. case Unit::EB:
    7. result /= 1024; // flow through
    8. case Unit::PB:
    9. result /= 1024; // flow through
    10. case Unit::TB:
    11. result /= 1024; // flow through
    12. case Unit::GB:
    13. result /= 1024; // flow through
    14. case Unit::MB:
    15. result /= 1024; // flow through
    16. case Unit::KB:
    17. result /= 1024; // flow through
    18. case Unit::Byte:
    19. result /= 1;
    20. default:
    21. break;
    22. }
    23. return result;
    24. }

测试代码:

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

运行结果:

    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
迷上了代码!