bmt*_*033 1 c# string hex trim
我有一个字节数组,每个字节都用 0xFF 初始化:
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = 0xFF;
}
Run Code Online (Sandbox Code Playgroud)
一旦这个字节数组填充了有效数据,我需要提取存储在偏移量 192 处的 ASCII 字符串,长度最多可达 32 个字符。我这样做是这样的:
ASCIIEncoding enc = new ASCIIEncoding();
stringToRead = enc.GetString(buffer, 192, 32);
Run Code Online (Sandbox Code Playgroud)
这是可行的,但我需要去掉包含 0xFF 的尾随字节,以避免字符串看起来像“John Smith?????????????????????”。.NET 中有提供这种功能的函数吗?也许是类似 String.TrimEnd() 函数的东西,或者我正在寻找正则表达式来执行此操作?
我建议只找出字符串的实际长度:
int firstFF = Array.IndexOf(buffer, (byte) 0xff, 192);
if (firstFF == -1)
{
firstFF = buffer.Length;
}
stringToRead = Encoding.ASCII(buffer, 192, firstFF - 192);
Run Code Online (Sandbox Code Playgroud)
我不会尝试给出Encoding.ASCII不是有效 ASCII 编码文本的字节。我不知道它会对它们做什么 - 我怀疑它会将它们转换为显示?错误(如您现有的输出所建议的),但随后您将无法区分该问题和真正的问题分数。例如:
byte[] data = { 0x41, 0x42, 0x43, 0xff, 0xff };
string text = Encoding.ASCII.GetString(data);
Console.WriteLine(text.Contains((char) 0xff)); // False
Console.WriteLine(text.TrimEnd((char) 0xff).Length); // Still 5...
Run Code Online (Sandbox Code Playgroud)
现在您可以创建一个使用一些非 ASCII 替换字符的编码...但是当您只能找到二进制数据不再有效的位置时,这就很麻烦了。