我有以下功能:
public void SetTagData(string _data)
{
string data = _data;
byte[] ba = Encoding.Default.GetBytes(data);
string hexString = BitConverter.ToString(ba);
hexString = hexString.Replace("-", "");
var blockStart = 0;
var bufferHexBlocks = String.Empty;
try
{
for (var i = 0; i < hexString.Length; i++)
{
var byteList = new List<byte>();
byte[] datablockKey = ConvertHelpers.ConvertHexStringToByteArray(i.ToString().PadLeft(2, '0'));
var block = hexString.Substring(blockStart, 8);
byte[] datablockValue = ConvertHelpers.ConvertHexStringToByteArray(block);
byteList.AddRange(datablockKey);
byteList.AddRange(datablockValue);
_reader.Protocol("wb", byteList.ToArray());
blockStart += 8;
}
}
catch (Exception ex)
{
console.log(ex.message);
}
}
传入的数据是一堆十六进制字符串。我需要将此十六进制字符串拆分为 8 个字符的批次,从00to附加一个递增的 0 填充十六进制数1f,并将此新字符串作为字节数组发送到_reader.Protocol函数,该函数接受一个字符串wb作为第一个参数,将块作为第二个参数。
例如传入的数据是:
string data = "3930313B36313B5350542D53504C3B3830303B3B352E373B3B303B303B3B3B34353036383B4E3B4E3B"
我需要将以下内容发送到_reader.Protocol对象:(增量填充的十六进制01, 02, 03, ... , 0f)和数据字符串的前 8 个字符,然后是下一个,依此类推作为字节数组。 [013930313B],[0236313B53]等等。
我想我已经接近了……但错过了一些东西……
我目前的问题是我不知道如何在 8 个块中循环,如果十六进制字符串是 82 个字符而不是 80 个(8 的倍数),那么我将如何获取最后两个字符而不会得到一个IndexOutofRange 异常。
注意:这是针对 Windows CE 应用程序的,因此请不要使用新的 C# 功能。
相关分类