public void parse_table(BinaryReader inFile){ byte[] idstring = inFile.ReadBytes(6); Console.WriteLine(Convert.ToString(idstring));}
这是一个简单的片段:读取文件的前 6 个字节并将其转换为字符串。
但是控制台显示System.Byte[]
.
也许我使用了错误的类进行转换。我应该使用什么?它最终将解析以 UTF-8 编码的文件名,我计划使用相同的方法来读取所有文件名。
实际上是:
Console.WriteLine(Encoding.Default.GetString(value));
或者特别是对于 UTF-8:
Console.WriteLine(Encoding.UTF8.GetString(value));
我陷入了一个困境,我有一个有符号字节数组(sbyte[]
)作为测试类的输入,为了简单起见,我想用普通的字节数组(byte[]
)替换它。我从谷歌搜索来到这里,但汤姆的回答对我没有用。
我编写了一个帮助器方法来打印出给定byte[]
的初始值设定项:
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());
}
你可以像这样使用它:
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#,然后可以将其复制到代码中。
为了完整起见,这是UnsignedBytesFromSignedBytes
方法:
// 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;
}
我在代码库中使用了以下简单代码:
static public string ToReadableByteArray(byte[] bytes)
{
return string.Join(", ", bytes);
}
要使用:
Console.WriteLine(ToReadableByteArray(bytes));
byte[] bytes = { 1,2,3,4 };
string stringByte= BitConverter.ToString(bytes);
Console.WriteLine(stringByte);
这只是 Jesse Webbs 代码的更新版本,不会附加不必要的尾随,
字符。
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();
}
此方法的输出为:
new byte[] { 48, ... 135, 31, 178, 7, 157 }
为了获得 linq 和字符串插值的一些乐趣:
public string ByteArrayToString(byte[] bytes)
{
if ( bytes == null ) return "null";
string joinedBytes = string.Join(", ", bytes.Select(b => b.ToString()));
return $"new byte[] {{ {joinedBytes} }}";
}
测试用例:
byte[] bytes = { 1, 2, 3, 4 };
ByteArrayToString( bytes ) .Dump();
ByteArrayToString(null).Dump();
ByteArrayToString(new byte[] {} ) .Dump();
输出:
new byte[] { 1, 2, 3, 4 }
null
new byte[] { }