我有一个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。转换函数:
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
是什么,每次当我看到通过流写入器在服务器上写入的值显示为"System.byte[]
"。我也试过使用BitConverter.GetBytes()函数,但它给出了相同的结果。
我错过了什么?以及如何将数字写成字节格式。在上面的例子中,文本的长度是7("ABCDEFG"),但在我的应用程序中,它将超过1000。
查看关于StreamWriter.Write()方法的文档。如果浏览这些重载,它们都不接受字节数组。最好的匹配是字符串,因此编译为IL,它将尝试通过调用数组的. tostring()方法将数组转换为字符串。由于数组不会重载。tostring()方法,因此您将获得基本对象类型的默认实现,并且只返回类型名称…因此你的System.byte[]
结果。
这让人想知道为什么StreamWriter不知道如何处理字节数组。让我们检查一下关于StreamWriter类型的文档,我引用它:
实现一个textwwriter,用于以特定编码将字符写入流。
啊哈!没有字节数组重载的原因是,您使用的是专门为Text设计的类型。
要解决这个问题,您需要使用基本流类型或BinaryWriter类型,而不是StreamWriter。这两种类型都可以很好地使用字节数组。
最后,我需要指出你声明的数组是错误的。在VB。. Net中,数组声明上的下标是数组中最后一个元素的索引。Dim tempArr(2) As Byte
声明了一个数组,其中包含三个元素,而不是两个,下标分别为0、1和2。