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

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.hqwc.cn/news/617199.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析实验报告c++实现(TSP问题、哈夫曼编码问题、顾客安排问题、最小生成树问题、图着色问题)

一、实验目的 1&#xff0e;加深学生对贪心算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用贪心算…

C# Solidworks二次开发:相机访问相关API详解

大家好&#xff0c;今天要介绍的API为相机相关的API&#xff0c;这篇文章比较适合女孩子&#xff0c;学会了相机就会拍照了&#xff0c;哈哈。 下面是要介绍的API: &#xff08;1&#xff09;第一个为GetFocalDistance&#xff0c;这个API的含义为获取相机的焦距&#xff0c;…

共享内存及共享内存实现进程间通信

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 我们知道&#xff0c;进程是具有独立性的&#xff0c;什么叫进程具有独立性&#xff1f;就是说&#xff0c;每一个进程都有他们自己的虚拟地址空间&#xff0c;而虚拟进程空间里的虚拟地址通过页表映射到不同的物理内存上&am…

电池电量监测系统设计 单片机+LabVIEW+Matlab+Protues+Keil程序

目录 前言 提供 软件 系统展示 1.放电试验及其处理 2.硬件系统原理图 3.下位机程序 4.显示 5.上位机界面 6.上位机程序 7.文档 资料下载地址&#xff1a;电池电量监测系统设计 单片机LabVIEWMatlabProtuesKeil程序 前言 这套系统首先使用Matlab分析获得了电压…

【Java系列】SpringCloudAlibaba统一返回体及全局异常捕获实现

本文将以实际代码展示如何实现SpringCloudAlibaba的统一返回体及全局异常捕获。 作者&#xff1a;后端小肥肠 1. 前言 在构建微服务应用时&#xff0c;统一返回体和异常捕获机制的设计对于保持代码的整洁性和提高服务的可维护性至关重要。特别是在使用 Spring Boot 和 Spring …

DataX案例,MongoDB数据导入HDFS与MySQL

【尚硅谷】Alibaba开源数据同步工具DataX技术教程_哔哩哔哩_bilibili 目录 1、MongoDB 1.1、MongoDB介绍 1.2、MongoDB基本概念解析 1.3、MongoDB中的数据存储结构 1.4、MongoDB启动服务 1.5、MongoDB小案例 2、DataX导入导出案例 2.1、读取MongoDB的数据导入到HDFS 2…

Re65:读论文 GPT-3 Language Models are Few-Shot Learners

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Language Models are Few-Shot Learners ArXiv网址&#xff1a;https://arxiv.org/abs/2005.14165 2020 NeurIPS&#xff1a;https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb49674…

UVa1313/LA2693 Ghost Busters

UVa1313/LA2693 Ghost Busters 题目链接题意分析AC代码 题目链接 本题是2002年ICPC欧洲区域赛东北欧赛区的G题 题意 有 N ( N ≤ 100 ) N(N≤100) N(N≤100)个鬼&#xff0c;每个鬼是中心在 ( X i , Y i , Z i ) ( 1 ≤ X i , Y i , Z i ≤ 10000 ) (X_i,Y_i,Z_i) (1 ≤ X_i,Y…

Python中的回调函数和C中函数指针什么关系?

你好&#xff0c;我是安然无虞。 Python 回调 在Python中&#xff0c;‘回调函数’ (callback) 是指一个作为参数传递给其它代码的函数。 目的是在后者完成某些操作后调用这个传递进来的函数。 回调允许在执行异步操作或处理事件时通知调用者代码。 回调函数通常用于&#…

【数据结构】-- 单链表 vs 双向链表

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

react query 学习笔记

文章目录 react query 学习笔记查询客户端 QueryClient获取查询客户端 useQueryClient异步重新请求数据 queryClient.fetchQuery /使查询失效 queryClient.invalidateQueries 与 重新请求数据queryClient.refetchQueries 查询 QueriesuseQuery查询配置对象查询的键值 Query Key…

力扣 | 24. 两两交换链表中的节点

两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 输入&#xff1a;head 1->2->3->4->5->NULL 输出&#xff1a;2->1-&g…