将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace XP.Hardware.PLC.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// 十六进制数据格式化工具 | Hex data formatter utility
|
||||
/// 将 byte[] 格式化为标准十六进制查看器格式
|
||||
/// </summary>
|
||||
public static class HexFormatter
|
||||
{
|
||||
/// <summary>
|
||||
/// 将 byte[] 格式化为十六进制查看器文本 | Format byte[] as hex viewer text
|
||||
/// 每行 16 字节,包含偏移量、十六进制值和 ASCII 表示
|
||||
/// </summary>
|
||||
/// <param name="data">字节数据 | Byte data</param>
|
||||
/// <param name="startOffset">起始偏移量 | Start offset</param>
|
||||
/// <returns>格式化后的字符串 | Formatted string</returns>
|
||||
public static string Format(byte[] data, int startOffset = 0)
|
||||
{
|
||||
if (data == null || data.Length == 0)
|
||||
return string.Empty;
|
||||
|
||||
var sb = new StringBuilder();
|
||||
int totalBytes = data.Length;
|
||||
|
||||
for (int i = 0; i < totalBytes; i += 16)
|
||||
{
|
||||
// 偏移量(8位十六进制)| Offset (8-digit hex)
|
||||
sb.Append($"{(startOffset + i):X8} ");
|
||||
|
||||
// 前 8 字节十六进制 | First 8 bytes hex
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
if (i + j < totalBytes)
|
||||
sb.Append($"{data[i + j]:X2} ");
|
||||
else
|
||||
sb.Append(" ");
|
||||
}
|
||||
|
||||
sb.Append(' ');
|
||||
|
||||
// 后 8 字节十六进制 | Last 8 bytes hex
|
||||
for (int j = 8; j < 16; j++)
|
||||
{
|
||||
if (i + j < totalBytes)
|
||||
sb.Append($"{data[i + j]:X2} ");
|
||||
else
|
||||
sb.Append(" ");
|
||||
}
|
||||
|
||||
sb.Append(' ');
|
||||
|
||||
// ASCII 表示 | ASCII representation
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
if (i + j < totalBytes)
|
||||
{
|
||||
byte b = data[i + j];
|
||||
sb.Append(b >= 0x20 && b <= 0x7E ? (char)b : '.');
|
||||
}
|
||||
}
|
||||
|
||||
if (i + 16 < totalBytes)
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user