gpt4 book ai didi

c# - 在 C# 中将字节数组转换为字符串并再次返回

转载 作者:IT王子 更新时间:2023-10-29 04:38:21 26 4
gpt4 key购买 nike

事情是这样的:我正在尝试打开一个文件(从字节),将其转换为字符串,这样我就可以处理 header 中的一些元数据,将其转换回字节,然后保存。我现在遇到的问题是这段代码。当我将已经来回转换(但未以其他方式修改)的字符串与原始字节数组进行比较时,它是不相等的。我怎样才能使它工作?

public static byte[] StringToByteArray(string str)
{
UTF8Encoding encoding = new UTF8Encoding();
return encoding.GetBytes(str);
}

public string ByteArrayToString(byte[] input)
{
UTF8Encoding enc = new UTF8Encoding();
string str = enc.GetString(input);
return str;
}

这是我比较它们的方式。

byte[] fileData = GetBinaryData(filesindir[0], Convert.ToInt32(fi.Length));
string fileDataString = ByteArrayToString(fileData);
byte[] recapturedBytes = StringToByteArray(fileDataString);
Response.Write((fileData == recapturedBytes));

我确定它是 UTF-8,使用:

StreamReader sr = new StreamReader(filesindir[0]);
Response.Write(sr.CurrentEncoding);

返回“System.Text.UTF8Encoding”。

最佳答案

尝试 Encoding 类上的静态函数,它为您提供各种编码的实例。您不需要实例化 Encoding 就可以转换为字节数组或从字节数组转换。你如何比较代码中的字符串?

编辑

您比较的是数组,而不是字符串。它们是不相等的,因为它们指的是两个不同的数组;使用 == 运算符只会比较它们的引用,而不是它们的值。您需要检查数组的每个元素以确定它们是否等效。

public bool CompareByteArrays(byte[] lValue, byte[] rValue)
{
if(lValue == rValue) return true; // referentially equal
if(lValue == null || rValue == null) return false; // one is null, the other is not
if(lValue.Length != rValue.Length) return false; // different lengths

for(int i = 0; i < lValue.Length; i++)
{
if(lValue[i] != rValue[i]) return false;
}

return true;
}

关于c# - 在 C# 中将字节数组转换为字符串并再次返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422314/

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