c# - 在c#中将字符串转换为等效的字节十六进制
问题描述
我有一个传入的字符串68016101061B4A60193390662046804020422044204000420040402060226024676DB16
,我想转换为0x68 0x01 0x61 0x01 0x06 0x1B 0x4A 0x60 0x0B 0x86 0xE8 0x46 0x04 0x68 0x04 0x02 0x04 0x22 0x04 0x42 0x04 0x00 0x04 0x20 0x04 0x40 0x02 0x06 0x02, 0x26 0x02 0x46 0x76 0xDB 0x16
但以字节为单位。我想将这些字节写入串行端口。
port.Write(bytes, 0, bytes.Length);
更新 1
下面是我通过硬编码发送的字节数组
var dataItems = new byte[] { 0x68, 0x01, 0x61, 0x01, 0x06, 0x1B, 0x4A, 0x60, 0x0B, 0x86, 0xE8, 0x46, 0x04, 0x68, 0x04, 0x02,
0x04, 0x22, 0x04, 0x42, 0x04, 0x00, 0x04, 0x20, 0x04, 0x40, 0x02, 0x06, 0x02, 0x26, 0x02, 0x46 ,0x76 ,0xDB ,0x16 };
它给了我下面的数组
我怎样才能转换它?
解决方案
您可以使用正则表达式来执行此操作:
var regex = new Regex(@"(\d{2})");
string aString = "040204220442040004200404020602260246";
string replaced = regex.Replace(aString, "x$1 ");
编辑似乎您需要字节而不是字符串,您可以使用此处建议的基于 Linq 的答案之一或一个简单的循环:
if ((aString.Length % 2) != 0)
{
// Handle invalid input
}
var bytes = new byte[aString.Length / 2];
int index = 0;
for (int i = 0; i < aString.Length; i += 2)
{
string digits = aString.Substring(i, 2);
byte aByte = (byte)int.Parse(digits, NumberStyles.HexNumber);
bytes[index++] = aByte;
}
port.Write(bytes, 0, bytes.Length);
请注意,如果 GC 压力成为问题,您可以使用ReadOnlySpan<char>
.
推荐阅读
- git - 我正在尝试从 gitlab 获取数据,但遇到错误
- java - AltBeacon:如何使用 AltBeacon Lib 获取广告标志(例如 BR/EDR)?
- powershell - 注册计划任务在工作站上完美运行
- linux - Linux集群系统中,ValueError: numpy.dtype has wrong size,尝试重新编译。预期 88,得到 96
- c# - 将主摄像机缓慢移动到另一个位置
- vnc - VNC - 扩展显示 - 多个显示(本地和远程)
- javascript - 从中心 ER 图 Javascript 扩展表格的算法
- java - Java - 地图
> - 如何使 intelliJ 调试面板打印映射值的 toString() - javascript - 使用 .find() 获取元素的所有后代,但不获取它们的后代
- c++ - 在哪里可以找到 Vulkan C++ 规范?