这是我的功能的要求:
取以下字符串:
6900460420006149231=13050010300100000
并将其转换为以下字节数组:
{ 0x37, 0x06, 0x90, 0x04, 0x60, 0x42, 0x00, 0x06, 0x14, 0x92, 0x31, 0xD1, 0x30, 0x50, 0x01, 0x03, 0x00, 0x10, 0x00, 0x00 }
第一个字节 0x37 是二进制字符串的原始长度。接下来的 10 个字节是以 bcd 格式编码的字符串“6900460420006149231”。这就是棘手的地方。现在我需要十六进制“D”来表示两个字段之间的分隔符(=)。您可以在字节数组中的 12 索引的高半字节中看到十六进制。字节数组的其余部分是以 bcd 格式编码的第二个字段“13050010300100000”。如果原始长度是奇数,我会用前导零填充未使用数据的前半字节。
我不指望任何人都能全面实施,所以让我们分解一下并解决我遇到问题的地方。可以说我有:
byte[] field1Bytes = { 0x06, 0x90, 0x04, 0x60, 0x42, 0x00, 0x06, 0x14, 0x92, 0x31 }
byte[] field2Bytes = { 0x01, 0x30, 0x50, 0x01, 0x03, 0x00, 0x10, 0x00, 0x00 }
byte separator = 13; // D 0x0D
如果我只是使用 Array.Copy,我最终会得到:
{ 0x06, 0x90, 0x04, 0x60, 0x42, 0x00, 0x06, 0x14, 0x92, 0x31, 0x0D, 0x01, 0x30, 0x50, 0x01, 0x03, 0x00, 0x10, 0x00, 0x00 }
上面的字节数组并不是我所需要的。关于如何实现以下函数以使我更接近我想要实现的任何想法:
byte[] ShiftLeftAndCombine(byte[] b1, byte[] b2)
在哪里
ShiftLeftAndCombine({0x0d}, {0x01, 0x30})
会回来
{0xd1, 0x30}
- 在旁注中,我意识到我需要处理偶数/奇数字段长度来处理我正在编写的实际函数,但让我担心 =]