我有一个java函数,我试图在VB.NET中模仿相同的功能。
Java函数:
String text = “ABCDEFG”
int length = text.length();
int l1 = length >> 8;
int l2 = length % 256;
swriter.write(new byte[] {(byte)l1, (byte)l2});
我的VB.NET转换功能:
Dim text As String = "ABCDEFG"
Dim length As Integer = text.Length
Dim l1 As Integer = length >> 8
Dim l2 As Integer = length Mod 256
Dim tempArr(2) As Byte
tempArr(0) = Convert.ToByte(l1)
tempArr(1) = Convert.ToByte(l2)
swriter.Write(tempArr)
swriter是一个StreamWriter
每当我看到通过服务器上的streamwriter写的值显示为“System.byte[]
”时,是什么?我也试过使用BitConverter.GetBytes()函数,但它给出了相同的结果。
我错过了什么?以及如何将数字写为字节格式。在上面的示例中,文本的长度为7(“ABCDEFG”),但在我的应用程序中,它将超过1000.
答案 0 :(得分:4)
查看StreamWriter.Write() method上的文档。如果浏览这些重载,它们都不接受字节数组。最佳匹配是一个字符串,因此这将编译为IL,它将尝试通过调用数组的.ToString()方法将数组转换为字符串。由于数组不会重载.ToString()方法,因此您将获得基础对象类型的默认实现,并且只返回类型名称...因此您的System.byte[]
结果。
这让人想知道为什么StreamWriter不知道如何处理字节数组。让我们检查documentation on the StreamWriter type,我引用它:
实现TextWriter,以便以特定编码将字符写入流中。
啊哈!没有字节数组重载的原因是您使用的是专门用于处理文本的类型。
要解决此问题,您需要使用基本Stream类型或BinaryWriter类型,而不是StreamWriter。这些类型中的任何一种都非常满意work with byte arrays。
最后,当我遇到它时,我需要指出你声明你的数组是错误的。在VB.Net中,数组声明的下标是数组中最后一个元素的索引。 Dim tempArr(2) As Byte
声明一个数组,其中三个元素,而不是两个,索引为0,1和2。