C#: Converting byte array to string and printing out to console
1 2 3 4 5 | public void parse_table(BinaryReader inFile) { byte[] idstring = inFile.ReadBytes(6); Console.WriteLine(Convert.ToString(idstring)); } |
这是一个简单的片段:读取文件的前6个字节并将其转换为字符串。
但是控制台显示
也许我用的是错误的课程。我应该用什么?它最终将解析以UTF-8编码的文件名,我计划使用相同的方法读取所有文件名。
事实上:
1 | Console.WriteLine(Encoding.Default.GetString(value)); |
或者对于UTF-8:
1 | Console.WriteLine(Encoding.UTF8.GetString(value)); |
我当时处于一种困境,我有一个带符号的字节数组(
我编写了一个助手方法来打印给定
1 2 3 4 5 6 7 8 9 10 | public void PrintByteArray(byte[] bytes) { var sb = new StringBuilder("new byte[] {"); foreach (var b in bytes) { sb.Append(b +","); } sb.Append("}"); Console.WriteLine(sb.ToString()); } |
您可以这样使用它:
1 2 3 4 5 | var signedBytes = new sbyte[] { 1, 2, 3, -1, -2, -3, 127, -128, 0, }; var unsignedBytes = UnsignedBytesFromSignedBytes(signedBytes); PrintByteArray(unsignedBytes); // output: // new byte[] { 1, 2, 3, 255, 254, 253, 127, 128, 0, } |
输出是有效的C,然后可以将其复制到代码中。
为了完整起见,这里是
1 2 3 4 5 6 7 | // http://stackoverflow.com/a/829994/346561 public static byte[] UnsignedBytesFromSignedBytes(sbyte[] signed) { var unsigned = new byte[signed.Length]; Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length); return unsigned; } |
这只是JesseWebbs代码的一个更新版本,它没有附加不必要的尾随
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static string PrintBytes(this byte[] byteArray) { var sb = new StringBuilder("new byte[] {"); for(var i = 0; i < byteArray.Length;i++) { var b = byteArray[i]; sb.Append(b); if (i < byteArray.Length -1) { sb.Append(","); } } sb.Append(" }"); return sb.ToString(); } |
此方法的输出将是:
1 |
我在代码库中使用了这个简单的代码:
1 2 3 4 | static public string ToReadableByteArray(byte[] bytes) { return string.Join(",", bytes); } |
使用:
1 | Console.WriteLine(ToReadableByteArray(bytes)); |
1 2 3 4 5 | byte[] bytes = { 1,2,3,4 }; string stringByte= BitConverter.ToString(bytes); Console.WriteLine(stringByte); |
对于Linq和字符串插值的一些乐趣:
1 2 3 4 5 6 | public string ByteArrayToString(byte[] bytes) { if ( bytes == null ) return"null"; string joinedBytes = string.Join(",", bytes.Select(b => b.ToString())); return $"new byte[] {{ {joinedBytes} }}"; } |
测试用例:
1 2 3 4 | byte[] bytes = { 1, 2, 3, 4 }; ByteArrayToString( bytes ) .Dump(); ByteArrayToString(null).Dump(); ByteArrayToString(new byte[] {} ) .Dump(); |
输出: