gpt4 book ai didi

c# - 从字符串中删除垃圾值

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:40 24 4
gpt4 key购买 nike

我正在使用 C# 4.0 中的 C++ 库从 Device(Time attendance) 获取数据,问题是名称字段有一些垃圾值。

Name 字段是字节数组,我曾尝试使用 Encoding.Default.GetString(user.Name),这里的 user 是一个 Struct。

[StructLayout(LayoutKind.Sequential, Size = 48, CharSet = CharSet.Ansi), Serializable]
public struct User
{
public int ID;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 12)]
public byte[] Name;
}

输出

"Jon\0 41 0"
"rakesh\0 6"

我想删除 \0 41 0\0 6

如有任何帮助,我们将不胜感激。

最佳答案

保持简单:

static class StringExtensions
{
public static string TrimNullTerminatedString(this string s)
{
if (s == null)
throw new NotImplementedException();
int i = s.IndexOf('\0');
if (i >= 0)
return s.Substring(0, i);
return s;
}
}

像这样使用它:

string name = Encoding.Default.GetString(user.Name).TrimNullTerminatedString();

也就是说,更好的选择是在声明级别处理它。如果Name是一个字符串,没有理由将它声明为byte[];将其声明为字符串,空终止字符将被正确处理:

[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 12)]
public string Name;

在代码中也更容易操作......

关于c# - 从字符串中删除垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20879457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com