gpt4 book ai didi

c# - 如何扩展字符串以反序列化二进制数据

转载 作者:行者123 更新时间:2023-11-30 19:57:17 24 4
gpt4 key购买 nike

我正在使用自己的扩展方法将字符串(和更多数据类型)序列化为具有自定义二进制格式(外部,我无法修改该格式)的文件。我的方法是:

public static byte[] Serialize(this string str)
{
if (str.Length > short.MaxValue)
throw new ArgumentOutOfRangeException("str", "Max length allowed is " + short.MaxValue.ToString());
List<byte> data = new List<byte>();
data.Add(0);
data.Add(0);
if (str != null)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
data.AddRange(buffer);
data[0] = (byte)(buffer.Length % 256);
data[1] = (byte)((buffer.Length / 256) >> 8);
}
return data.ToArray();
}

用法示例:

string str1 = "Binary String";
byte[] data = str1.Serialize();

结果是

data = { 13, 0, 66, 105, 110, 97, 114, 121, 32, 83, 116, 114, 105, 110, 103 }

现在我正在尝试添加另一种扩展方法来在读取这些文件时进行反序列化:

public static void Deserialize(this string str, byte[] data)
{
if (data == null || data.Length < 2)
{
str = null;
}
else
{
short length = (short)(data[0] + (data[1] << 8));
if (data.Length != length + 2)
throw new ArgumentException("Invalid data", "data");
str = Encoding.UTF8.GetString(data, 2, length);
}
}

如果我尝试这样做:

string str2 = null;
str2.Deserialize(data);

str2 的预期结果是

"Binary String"

实际结果是

null

但是,当逐步调试时,Deserialize() 中的 str 在行 str = Encoding.UTF8.GetString(data, 2 , 长度);.

也试过这个:

string str3 = string.Deserialize(data);

但是编译不通过,报错信息是

Error 1 'string' does not contain a definition for 'Deserialize'

我不知道我做错了什么。关于如何解决它的任何想法?

最佳答案

extension method 的第一个参数是您正在操作的对象。在本例中,它是字节数组 data。返回类型是您想要填充到字符串变量中的内容。因此,Deserialize 方法的签名应该是:

public static string Deserialize(this byte[] data)

同样在方法内部,您需要返回字符串值,因此您的完整方法应该是(请注意,我稍微简化了它):

public static string Deserialize(this byte[] data)
{
if (data == null || data.Length < 2)
return null;

short length = (short)(data[0] + (data[1] << 8));
if (data.Length != length + 2)
throw new ArgumentException("Invalid data", "data");

return Encoding.UTF8.GetString(data, 2, length);
}

然后你像这样使用它:

string str1 = "Binary String";
byte[] data = str1.Serialize();
string str2 = data.Deserialize();

关于c# - 如何扩展字符串以反序列化二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760503/

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