I get strange results when converting byte array to string and then converting the string back to byte array.
Try this:
byte[] b = new byte[1];
b[0] = 172;
string s = Encoding.ASCII.GetString(b);
byte[] b2 = Encoding.ASCII.GetBytes(s);
MessageBox.Show(b2[0].ToString());
And the result for me is not 172 as I'd expect but... 63.
Why does it happen?
Why does it happen?
Because ASCII only contains values up to 127.
When faced with binary data which is invalid for the given encoding, Encoding.GetString
can provide a replacement character, or throw an exception. Here, it's using a replacement character of ?
.
It's not clear exactly what you're trying to achieve, but:
Convert.ToBase64String
instead; do not try to use an encoding, as you're not really representing text. You can use Convert.FromBase64String
to then decode.Encoding.ASCII
is usually a bad choice, and certainly binary data including a byte of 172 is not ASCII textEncoding.Default
unless you really know the data is in the default encoding for the platform you're working on. If you get the choice, using UTF-8 is a good one.See more on this question at Stackoverflow