以太网数据量大小字符串生成方法(可变单位)

news2025/4/8 21:23:22

0 前言

当我们想显示以太网数据量大小时,往往有个头疼的单位需要处理,单位取小了不一目了然,单位取大了精度太低。本例设计一个函数,将根据以太网数据量大小自动生成单位可变的字符串(KB、MB、GB、TB、PB),解决这一痛点。

1 以太网数据量大小字符串生成方法(可变单位)

1.1 相关宏定义

#define KB (u64)1024
#define MB (u64)(1024 * KB)
#define GB (u64)(1024 * MB)
#define TB (u64)(1024 * GB)
#define PB (u64)(1024 * TB)
#define EB (u64)(1024 * PB)

既然是可变单位,我们就得先定义KB、MB、GB、TB、PB、EB对应的Byte大小。

1.2 获取数据量大小对应字符串函数设计

/**
 * @brief 获取数据量大小对应的字符串
 * 
 * @param totalByte 总数据量(单位:Byte)
 * @param dataSizeStr 数据量字符串指针(容量≥10Byte)
 */
void get_data_size_str(u64 totalByte, char *dataSizeStr)
{
    double dataSize;
    if (totalByte < KB)
    {
        dataSize = totalByte;
        sprintf(dataSizeStr, "%0.2lfB", dataSize);
    }
    else if (totalByte < MB)
    {
        dataSize = totalByte / (double)KB;
        sprintf(dataSizeStr, "%0.2lfKB", dataSize);
    }
    else if (totalByte < GB)
    {
        dataSize = totalByte / (double)MB;
        sprintf(dataSizeStr, "%0.2lfMB", dataSize);
    }
    else if (totalByte < TB)
    {
        dataSize = totalByte / (double)GB;
        sprintf(dataSizeStr, "%0.2lfGB", dataSize);
    }
    else if (totalByte < PB)
    {
        dataSize = totalByte / (double)TB;
        sprintf(dataSizeStr, "%0.2lfTB", dataSize);
    }
    else if (totalByte < EB)
    {
        dataSize = totalByte / (double)PB;
        sprintf(dataSizeStr, "%0.2lfPB", dataSize);
    }
}

这里将传入的totalByte划分为几个范围,对应单位如下:
0-1KB:单位B
1KB-1MB:单位KB
1MB-1GB:单位MB
1GB-1TB:单位GB
1TB-1PB:单位TB
1PB-1EB:单位PB
可以看到由于每个单位之间倍数关系是1024,我们就可以将每次传入的totalByte在对应单位下求得的数据量的整数部分控制在1.00-1023.99之间,我们就可以一目了然看出以太网数据量大小。

2 测试

2.1 测试函数设计

int main(void)
{
    int i;
    u64 dataSizeUnit[5] = {KB, MB, GB, TB, PB};
    char dataSizeStr[16];
    for (i = 0; i < 5; i++)
    {
        get_data_size_str(dataSizeUnit[i], dataSizeStr);
        printf("Data : %s\r\n", dataSizeStr);
    }
    return 0;
}

我们的测试函数设计非常简单,就是传入KB、MB、GB、TB、PB,查看生成的数据量大小字符串是否正确。预期打印的结果分别是1.00KB、1.00MB、1.00GB、1.00TB、1.00PB。

2.2 测试结果

在这里插入图片描述
可以看到数据结果和我们预期的一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS之固定定位、相对定位、绝对定位

一、相对定位 相对元素自身所在的原来的位置进行定位&#xff0c;可以设置 left&#xff0c;right&#xff0c;top&#xff0c;bottom四个属性。 效果&#xff1a;在进行相对定位以后&#xff0c;元素原来所在的位置被保留了&#xff0c;既保留占位&#xff0c;其他元素的位置…

软件全周期检查单

1、立项阶段 2、计划阶段 3、需求阶段 4、设计阶段 5、编码集成阶段 6、测试阶段 7、交付阶段 8、结项阶段 软件全套资料包获取进主页或本文末个人名片直接获取。

Bezier曲线的绘制 matlab

式中&#xff1a; 称为基函数。 。 因为n表示次数&#xff0c;点数为n1&#xff0c;显然i表示第i个控制点。 显然在Matlab中可以同矩阵的形式来计算C(u)。 关键代码为&#xff1a; clc clear % 假设控制点P取值为&#xff1a; P [4,7;13,12;19,4;25,12;30,3]; % 因此&a…

5 个让日常编码更简单的 Python 库

今天我们一起来研究一些非常有用的第三方模块&#xff0c;可以使得我们的日常编码变得更加简单方便 sh https://github.com/amoffat/sh 如果曾经在 Python 中使用过 subprocess 库&#xff0c;那么我们很有可能对它感到失望&#xff0c;它不是最直观的库&#xff0c;可能还有些…

C语言中局部变量和全局变量是否可以重名?为什么?

可以重名 在C语言中, 局部变量指的是定义在函数内的变量, 全局变量指的是定义在函数外的变量 他们在程序中的使用方法是不同的, 当重名时, 局部变量在其所在的作用域内具有更高的优先级, 会覆盖或者说隐藏同名的全局变量 具体来说: 局部变量的生命周期只在函数内部,如果出了…

mars3d.MaterialType.Image2修改配置面状:图片2的speed数值实现动画效果说明

摘要&#xff1a; mars3d.MaterialType.Image2修改配置面状&#xff1a;图片2的speed数值实现动画效果说明 前提&#xff1a; 1.在示例中&#xff0c;尝试给mars3d.MaterialType.Image2材质的图片加上speed参数&#xff0c;实现动画效果&#xff0c;但是没有看到流动效果说明…

酷漫熊,最好用的漫画工具,资源全,支持下载,全部免费!

hi&#xff0c;大家好我是技术苟&#xff0c;每周准时上线为你带来实用黑科技&#xff01;由于公众号改版&#xff0c;现在的公众号消息已经不再按照时间顺序排送了。因此小伙伴们就很容易错过精彩内容。喜欢黑科技的小伙伴&#xff0c;可以将黑科技百科公众号设为标星&#xf…

互联网轻量级框架整合之MyBatis核心组件

在看本篇内容之前&#xff0c;最好先理解一下Hibernate和MyBatis的本质区别&#xff0c;这篇Hibernate和MyBatis使用对比实例做了实际的代码级对比&#xff0c;而MyBatis作为更适合互联网产品的持久层首选必定有必然的原因 MyBatis核心组件 MyBatis能够成为数据持久层首选框&a…

中国移动传关停8元保号套餐?或是5G成本带来的压力所致

日前有网友发现希望使用中国移动的保号套餐&#xff0c;却发现已无法办理&#xff0c;媒体对此多有报道&#xff0c;这意味着中国移动的套餐业务发生了重大变动&#xff0c;如此做或许在于5G成本上涨带来的压力促使它不得不提高套餐的门槛。 中国移动已建成最多的5G基站&#x…

世界各国柴油价格22.7统计

数据详情介绍&#xff1a; 统计时间为2022年7月4日。在该月份&#xff0c;全球柴油的平均价格为每升1.43美元。然而&#xff0c;各国间存在明显的价格差异。一般而言&#xff0c;西欧等发达国家的价格基本在每升2美元以上&#xff1b;相反&#xff0c;像伊朗、委内瑞拉、利比亚…

基于springboot实现视频网站管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现视频网站管理系统演示 摘要 使用旧方法对视频信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在视频信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问…

【信号与系统 - 8】取样定理

1 定义 取样处理就是对连续信号的离散化处理 p ( t ) p(t) p(t) 是开关函数 f s ( t ) f ( t ) ⋅ p ( t ) f_s(t)f(t)\cdot p(t) fs​(t)f(t)⋅p(t) 当 p ( t ) p(t) p(t) 为周期矩形函数时 该取样为均匀抽样&#xff0c;周期为 T s T_s Ts​&#xff0c;则取样角频率为&…

Python快速获取编程问题答案的方法库之howdoi使用详解

概要 howdoi是一个命令行工具,它提供了一种快速获取编程问题答案的方法,通过搜索和抓取Stack Overflow等网站的内容,直接在终端中显示编程问题的解决方案。 安装 通过pip可以轻松安装howdoi: pip install howdoi特性 快速访问编程解决方案:无需手动浏览Stack Overflow。…

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之三 简单动态聚光灯效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之三 简单动态聚光灯效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之三 简单动态聚光灯效果 一、简单介绍 二、简单动态聚光灯效果实现原理 三、简单动态聚光灯效果…

【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)

目录 树和森林树的存储结构一、树的双亲表示法&#xff1a;二、树的孩子表示法方法一&#xff1a;定长结点的多重链表方法二&#xff1a;不定长结点的多重链表方法三&#xff1a;孩子单链表表示法 三、树的二叉链表(孩子-兄弟)存储表示法 森林与二叉树的转换树和森林的遍历先根…

回溯算法练习day.1

回溯算法 回溯法的作用 递归函数与回溯算法是相辅相成的&#xff0c;回溯法往往在递归函数的“下面” 使用原因&#xff1a;有些问题无法暴力进行搜索&#xff0c;只能通过回溯法来解决&#xff0c;例如 1.组合问题 2.切割问题 3.子集问题 4.排列问题 5.棋盘问题 回溯算法是一…

ubuntu 更改 ssh 默认端口 22 以加固安全

出于加固安全考虑&#xff0c;一般公司会禁用 ssh 的 22 端口号&#xff0c;因此我们需要改为其他端口。 1、ssh 命令行登录 进入台式机&#xff0c;修改 /etc/ssh/sshd_config 文件中的 Port 配置行&#xff0c;将 22 改为 8022&#xff0c;保存修改后&#xff0c;重启 ssh 服…

一起学习python——基础篇(19)

今天来说一下python的如何修改文件名称、获取文件大小、读取文中指定的某一行内容。 1、修改文件名称&#xff1a; import os testPath"D:/pythonFile/test.txt" testPath2"D:/pythonFile/test2.txt" #修改文件名称使用rename方法&#xff0c; #第一个参…

Java文件操作-IO流

一、文件 1.基本概念 文件&#xff1a;文件是保存数据的地方&#xff0c;比如经常使用的word文档&#xff0c;txt文件&#xff0c;excel文件…都是文件。它既可以保存一张图片&#xff0c;也可以保持视频&#xff0c;声音… 文件流&#xff1a;文件在程序中是以流的形式来操…