0

我有一个 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。

4

1 回答 1

4

查看有关StreamWriter.Write() 方法的文档。如果您浏览这些重载,它们都不接受字节数组。最好的匹配是一个字符串,因此它编译为 IL,它将尝试通过调用数组的 .ToString() 方法将您的数组转换为字符串。由于数组不会重载 .ToString() 方法,因此您将获得基本 Object 类型的默认实现,并且只返回类型名称......因此您的System.byte[]结果。

这让人想知道为什么 StreamWriter 不知道如何处理字节数组。让我们查看有关 StreamWriter 类型的文档,我从中引用:

实现一个 TextWriter,用于以特定编码将字符写入流。

啊哈!没有字节数组重载的原因是您使用的是专门设计用于处理Text的类型。

要解决此问题,您需要使用基本Stream类型或BinaryWriter类型,而不是 StreamWriter。这些类型中的任何一种都非常乐意使用字节数组

最后,当我在这里时,我需要指出你声明你的数组是错误的。在 VB.Net 中,数组声明的下标是数组中最后一个元素的索引。声明一个包含三个Dim tempArr(2) As Byte元素而不是两个元素的数组,索引分别为 0、1 和 2。

于 2013-04-29T20:01:11.470 回答