【分享】C# 字节帮助类 ByteHelper

【分享】C# 字节帮助类 ByteHelper

独立观察员 2021 年 2 月 3 日

本文分享一个 C# 的字节(Byte)帮助类(ByteHelper),主要是一些字节、字节数组、十六进制、十六进制字符串等之间的转换操作,适用场景包括但不限于对于 M1 卡区块的读写时的数据转换等操作。

代码来源于网络,本人整理重构、仔细阅读代码并添加了较为详细的注释,一切说明见代码和注释,就不再赘述了,有不对的地方欢迎大家指出。

下面就是全部代码:

using System;
using System.Collections.Generic;
/** 源码己托管: http://gitee.com/dlgcy/dotnetcodes*/
namespace DotNet.Utilities
{/// <summary>/// 字节帮助类/// </summary>public class ByteHelper{/// <summary>/// 字节数组转为 16 进制字符串/// </summary>/// <param name="bytes"> 字节数组 </param>/// <returns>16 进制字符串 </returns>public static string ToHexString(byte[] bytes){string hexString = string.Empty;for (int i = 0; i < bytes.Length; i++){hexString += ByteToHexStr(bytes[i]);}return hexString;}/// <summary>/// 字节转为 16 进制字符串(一个字节转为两个字符:[0-F][0-F])/// </summary>/// <param name="inByte"> 字节 </param>/// <returns> 字符串 </returns>public static string ByteToHexStr(byte inByte){string result = string.Empty;try{char[] hexDict = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] charParts = new char[2];charParts[0] = hexDict[(inByte >> 4) & 0x0F]; // 放在 byte 左半部分的重新移回右边并匹配十六进制字符;charParts[1] = hexDict[inByte & 0x0F];        // 放在 byte 右半部分的直接匹配十六进制字符;result = new string(charParts);}catch (Exception ex){Console.WriteLine(ex);}return result;}/// <summary>/// 十六进制字符串转为字节数组/// </summary>/// <param name="hexStr"> 十六进制字符串 </param>/// <returns> 字节数组 </returns>public static byte[] HexStrToBytes(string hexStr){/* 说明:1byte=8bit,中文 char=2byte (此处不考虑),英文 char=1byte,1 个 “个位” 的十六进制数占 4bit,所以 2 个英文 char 转为十六进制数后占一个 byte */byte[] bytes = new byte[hexStr.Length / 2 + (((hexStr.Length % 2) > 0) ? 1 : 0)];for (int i = 0; i < bytes.Length; i++){char leftPart = hexStr[i * 2];char rightPart;if ((i * 2 + 1) < hexStr.Length)rightPart = hexStr[i * 2 + 1];elserightPart = '0';int a = ByteToHexValue((byte)leftPart);int b = ByteToHexValue((byte)rightPart);// 由于 16 进制数的 ' 个位 ' 数只占 4bit,所以左部分左移 4 位,加上右部分,共占 8 位,即一个 byte;bytes[i] = (byte)((a << 4) + b);}return bytes;}/// <summary>/// 转换字节(实际为英文 char)为 16 进制数据(0-15)/// </summary>/// <param name="b"> 字节 </param>/// <returns> 字节 </returns>public static byte ByteToHexValue(byte b){byte value = 0;if (b >= '0' && b <= '9'){// 原值在 ASCII 中介于 '0'-'9' 之间的:减去 0x30,即 ASCII 中 '0' 的十六进制表示(十进制为 48),得到数值 0-9。value = (byte)(b - 0x30);}if (b >= 'A' && b <= 'F'){// 原值在 ASCII 中介于 'A'-'F' 之间的:减去 0x37,十进制为 55,‘A’的 ASCII 十进制为 65,所以可得到数值 10-15。value = (byte)(b - 0x37);}if (b >= 'a' && b <= 'f'){// 原值在 ASCII 中介于 'a'-'f' 之间的:减去 0x57,十进制为 87,‘a’的 ASCII 十进制为 97,所以可得到数值 10-15。value = (byte)(b - 0x57);}return value;}/// <summary>/// 区块字符串数据转为区块字节数据(不足则补位:16 字节)/// </summary>/// <param name="blockData"> 区块字符串数据 </param>/// <returns>List<byte></returns>public static List<byte> GetBlockBytes(string blockData){List<byte> blockBytes = new List<byte>();blockBytes.AddRange(HexStrToBytes(blockData));if (blockBytes.Count < 16){for (int i = blockBytes.Count; i < 16; i++){blockBytes.Add(0x00);}}return blockBytes;}}
}

 

感谢阅读。

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

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

相关文章

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭&#xff0c;今天再来补充一下&#xff0c;肯定可以&#xff01;不少用户反映自己的Win10系统更新无法彻底关闭&#xff0c;网上提供的关闭Win10更新的教程&#xff0c;关闭之后还是会自动更新Win10系统&#xff0c;而今天装机之家分享…

python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...

其他的SQL不清楚, pymysql是没有类似函数的。说到框架&#xff0c;python常用的几个ORM, 我印象中也没有提供类似写法的。既然没人写&#xff0c;而你又在php里觉得这么用趁手&#xff0c;不如自己按php的思路实现一个。我自己写了个database类和一些工具函数, 你说的逻辑在我这…

国庆中秋活动——超强AR/3D地球仪!带你领略世界风光!我们未必能环游世界,但都该有个地球仪

通知&#xff01;通知&#xff01;通知&#xff01;&#xff01;&#xff01; 玩酷屋十一黄金优惠限时限量秒杀活动&#xff0c;能抢到算你厉害&#xff1a; 1、活动期间 2017/10/03 22:30 ——2017/10/06 22:30 2、【北斗AR地球仪】原价 299元&#xff0c;秒杀活动价 269元…

flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念类似于python中的函数&#xff0c;宏的作用就是在模板中重复利用代码&#xff0c;避免代码冗余。Jinja2支持宏&#xff0c;还可以导入宏&#xff0c;需要在多处重复使用的模板代码片段可以写入单独的文件&#xff0c;再包含在所有模板中&#xff0c;以避免重复。简单定…

PING 命令测试

使用 Ping 测试连接 Ping 命令有助于验证 IP 级的连通性。发现和解决问题时&#xff0c;可以使用 Ping 向目标主机名或 IP 地址发送 ICMP 回应请求。需要验证主机能否连接到 TCP/IP 网络和网络资源时&#xff0c;请使用 Ping。也可以使用 Ping 隔离网络硬件问题和不兼容配置。 …

如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题&#xff0c;也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈&#xff0c;MiniProfiler 就是这个领域中的一款产品&#xff0c;它是一款简单的&#xff0c;功能强大的web应用分析工具&#xff0c;MiniProfile…

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待&#xff0c;一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT)&#xff0c;适合腕间的完美尺寸&#xff0c;便捷的三时区时间显示&#xff0c;超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者&#xff1a;爱编程的小和尚原文链接&#xff1a;https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保&#xff0c;被我改造完后用来准备准备准备表白&#xff0c;谁说程序员不浪漫&#xff1f;&#xff01;不知道一直关注小编我的小伙伴们之前…

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节&#xff0c;你家的月饼都吃完了吗&#xff1f; 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据&#xff0c;我们来看看今年的“月饼消费”有哪些新趋势&#xff1f; 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用Silverlight2的WebClient下载远程图片

在Silverlight 2之前有一个Downloader对象&#xff0c;开发者一般使用Downloader下载图片和文体文件&#xff0c;这个对象在Silverlight 2中作为了一个特性被集成到WebClient类之中&#xff0c;你可以直接使用WebClient的OpenReadAsync方法加载远程图片的URI&#xff0c;然后使…

java os库_java-Mac OS X上的JNotify?

我想尝试JNotify,该插件库用于监视文件系统的更改,但无法弄清楚如何对其进行配置. JNotify的网页上说&#xff1a;“ java.library.path应该指向jnotify附带的本机库的位置(dll,dylib等)”.我是Mac OS X的新手,并不真正知道该怎么做.我正在使用NetBeans,希望有一种简单的方法可…

使用FuncT, TResult 委托实现API日志的记录

问题平常我们开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;那么我们一般怎么做的&#xff0c;一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。什么是FuncFunc&…

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

python数据分析numpy_(转)Python数据分析之numpy学习

Python模块中的numpy&#xff0c;这是一个处理数组的强大模块&#xff0c;而该模块也是其他数据分析模块(如pandas和scipy)的核心。接下面将从这5个方面来介绍numpy模块的内容&#xff1a;1)数组的创建2)有关数组的属性和函数3)数组元素的获取--普通索引、切片、布尔索引和花式…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…