c# - 从字符串末尾修剪十六进制

标签 c# string hex trim

我有一个字节数组,每个字节都用 0xFF 初始化:

for (int i = 0; i < buffer.Length; i++)
{
    buffer[i] = 0xFF;
}

此字节数组填入有效数据后,我需要提取存储在偏移量 192 处且长度最多为 32 个字符的 ASCII 字符串。我这样做是这样的:

ASCIIEncoding enc = new ASCIIEncoding();
stringToRead = enc.GetString(buffer, 192, 32);

这行得通,但我需要去掉包含 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);

不会尝试提供不是有效 ASCII 编码文本的 Encoding.ASCII 字节。我不知道 offhand 它会对它们做什么 - 我怀疑它会将它们转换为 ? 以显示错误(如您现有输出所建议的那样),但随后您将无法区分问号和真正的 问号。例如:

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...

现在您可以创建一个使用一些非 ASCII 替换字符的编码...但是当您只能找到二进制数据停止的位置时,这会很麻烦有效。

关于c# - 从字符串末尾修剪十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086459/

相关文章:

c# - 跨浏览器打印 View

c# - 在与统计/模拟软件交互时,C# 和 Java 中哪一个更容易、更快速?

python - 如何显示中文单词,而不是unicode单词

java - 按位运算检查字符串是否唯一

c++ - 如何在 C++ 中对具有十六进制值的字符串执行按字节异或?

c# - 在 int 数组中查找第 n 个最大的

c# - 事件窗口上的 Windows 系统事件是否已更改?

c - strrev() 函数在 Linux 中不可用吗?

c++ - char* 如何以十六进制读取这个整数?它在 ostream::write() 中如何工作?

javascript - 在某个像素大小的 javascript 生成的 PNG 图像停止工作后