How convert byte array to string
我用两个字符串创建了一个字节数组。如何将字节数组转换为字符串?
1 2 3 4 5 6
| var binWriter = new BinaryWriter (new MemoryStream ());
binWriter .Write("value1");
binWriter .Write("value2");
binWriter .Seek(0, SeekOrigin .Begin);
byte[] result = reader .ReadBytes((int)binWriter .BaseStream.Length); |
我想把result转换成字符串。我可以用BinaryReader来完成。但我不能使用BinaryReader(它不支持)。
- 你已经有了弦,所以你不能真的这样做-你到底在做什么?
- @哈罗德来自A&171;值1/2&187;字符串,我想这只是一个例子。
- OP不接受假设为UTF-8编码的答案,但接受了不同的答案,这表明假设为UTF-8编码是不安全的。
- 你只需要做一个EDOCX1[0]
根据您希望使用的编码:
1
| var str = System.Text.Encoding.Default.GetString(result); |
- 还应该使用编码类将字符串写入字节数组。
- 这实际上产生了一个有趣的结果,因为他用binarywriter.write(string)重载编写了字符串,这首先节省了字符串的长度。
- 请注意,这将清除进入字符串的字节以符合编码。如果要测试该编码的错误字节序列,请使用hforhisham下面的blockcopy方法。
- 另外,重要的是要注意,System.Text.Encoding.Default是系统当前的ANSI代码页—根据操作系统的配置方式,结果会有所不同。如果你知道字符串真正的编码方式,你应该用它来代替。
- 这是错误的。从问题中的代码来看,编码是utf8,这是BinaryWriter的默认值。
- 请参阅stackoverflow.com/questions/10611455/…
假设您使用的是UTF-8编码:
1 2 3 4 5 6 7
| string convert ="This is the string to be converted";
// From string to byte array
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(convert);
// From byte array to string
string s = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length); |
- 这个答案让读者省去了谷歌搜索另一个转换方向的必然过程。
- 由于编码规范和另一方面的转换,这个答案更准确。
- 与System.Text.Encoding.UTF8.GetString(buffer);相比,System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);有什么优点?
- @从参考资料来看,沃特万赫克不多。
您可以使用blockcopy在不处理编码的情况下执行此操作:
1 2 3
| char[] chars = new char[bytes .Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes .Length);
string str = new string(chars ); |
- 这对我不起作用。我在长度上有一个错误(不除以给出我需要的长度)。在得到正确的长度之后,我得到了一个ArgumentException,它试图构造字符串。
- 这仅在字符串使用UTF16编码时有效,UTF16是C字符串的默认内部编码方案。例如,如果字节数组仅使用原始字符串中的ASCII字符进行编码(假定可以),则在块复制之后,每个字符将被两个这样的ASCII字符压缩,这显然是错误的。
- 在另一方面,如果您试图创建一个损坏的测试字符串,这正是实现这一点的方法。谢谢!
- 如果只想转换成字符串然后返回,我认为您不需要担心编码问题,请参阅stackoverflow.com/questions/472906/…
- 我认为如果你在bytes.Length / sizeof(char)上使用Math.Ceiling,那么它将始终正常工作。
要将字节[]转换为字符串[],只需使用下面的行。
1 2 3 4 5 6 7 8 9 10 11
| byte[] fileData ; // Some byte array
//Convert byte[] to string[]
var table = (Encoding .Default.GetString(
fileData,
0,
fileData .Length - 1)).Split(new string[] {"
", "
", "
" },
StringSplitOptions .None); |