13

我如何声明这样的字符串:

Dim strBuff As String * 256

在 VB.NET 中?

4

10 回答 10

7

这取决于您打算将字符串用于什么目的。如果您将它用于文件输入和输出,您可能希望使用字节数组来避免编码问题。在 vb.net 中,一个 256 个字符的字符串可能超过 256 个字节。

Dim strBuff(256) as byte

您可以使用编码从字节传输到字符串

Dim s As String
Dim b(256) As Byte
Dim enc As New System.Text.UTF8Encoding
...
s = enc.GetString(b)

如果需要用它来接收数据,可以给一个字符串分配256个单字节字符,但是在vb.net和vb6中参数传递可能不同。

s = New String(" ", 256)

此外,您可以使用 vbFixedString。但是,我不确定这是做什么的,因为当您将不同长度的字符串分配给以这种方式声明的变量时,它会变成新的长度。

<VBFixedString(6)> Public s As String
s = "1234567890" ' len(s) is now 10
于 2010-02-21T18:56:13.383 回答
7

使用 VBFixedString 属性。在此处查看 MSDN 信息

<VBFixedString(256)>Dim strBuff As String
于 2010-02-21T09:10:43.167 回答
3

要编写此 VB 6 代码:

Dim strBuff As String * 256

在 VB.Net 中,您可以使用以下内容:

Dim strBuff(256) As Char
于 2010-02-21T09:17:48.367 回答
3

使用字符串生成器

'Declaration   
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
于 2013-04-23T11:39:35.950 回答
1

您可以使用Microsoft.VisualBasic.Compatibility

Imports Microsoft.VisualBasic.Compatibility

Dim strBuff As New VB6.FixedLengthString(256)

但它被标记为已过时并且特别不支持 64 位进程,因此请编写自己的复制功能,即在设置长值时截断并用空格填充短值。它还像上面一样将“未初始化”值设置为空值。

来自 LinqPad 的示例代码(我不能允许Imports Microsoft.VisualBasic.Compatibility,因为它被标记为过时,但我没有证据):

Imports Microsoft.VisualBasic.Compatibility

Dim U As New VB6.FixedLengthString(5)
Dim S As New VB6.FixedLengthString(5, "Test")
Dim L As New VB6.FixedLengthString(5, "Testing")
Dim p0 As Func(Of String, String) = Function(st) """" & st.Replace(ChrW(0), "\0") & """"
p0(U.Value).Dump()
p0(S.Value).Dump()
p0(L.Value).Dump()
U.Value = "Test"
p0(U.Value).Dump()
U.Value = "Testing"
p0(U.Value).Dump()

有这个输出:

"\0\0\0\0\0"
"测试" "测试"
"
测试" "测试
"

于 2014-11-01T04:26:57.887 回答
1

尝试这个:

    Dim strbuf As New String("A", 80)

创建一个用“AAA....”填充的 80 个字符的字符串

在这里,我从二进制文件中读取了 80 个字符的字符串:

    FileGet(1,strbuf)

将 80 个字符读入 strbuf...

于 2014-03-23T00:03:09.143 回答
1

该对象可以定义为具有一个构造函数和两个属性的结构。

Public Structure FixedLengthString
     Dim mValue As String
     Dim mSize As Short

     Public Sub New(Size As Integer)
         mSize = Size
         mValue = New String(" ", mSize)
     End Sub

     Public Property Value As String
         Get
             Value = mValue
         End Get

         Set(value As String)
             If value.Length < mSize Then
                 mValue = value & New String(" ", mSize - value.Length)
             Else
                 mValue = value.Substring(0, mSize)
             End If
         End Set
     End Property
 End Structure

https://jdiazo.wordpress.com/2012/01/12/getting-rid-of-vb6-compatibility-references/

于 2016-12-14T05:29:17.850 回答
-1
Dim a as string

a = ...

If a.length > theLength then

     a = Mid(a, 1, theLength)

End If
于 2012-11-14T01:54:04.807 回答
-1

这还没有完全测试,但这里有一个类来解决这个问题:

''' <summary>
''' Represents a <see cref="String" /> with a minimum
''' and maximum length.
''' </summary>
Public Class BoundedString

    Private mstrValue As String

    ''' <summary>
    ''' The contents of this <see cref="BoundedString" />
    ''' </summary>
    Public Property Value() As String
        Get
            Return mstrValue
        End Get

        Set(value As String)
            If value.Length < MinLength Then
                Throw New ArgumentException(String.Format("Provided string {0} of length {1} contains less " &
                                                          "characters than the minimum allowed length {2}.",
                                                          value, value.Length, MinLength))
            End If

            If value.Length > MaxLength Then
                Throw New ArgumentException(String.Format("Provided string {0} of length {1} contains more " &
                                                          "characters than the maximum allowed length {2}.",
                                                          value, value.Length, MaxLength))
            End If

            If Not AllowNull AndAlso value Is Nothing Then
                Throw New ArgumentNullException(String.Format("Provided string {0} is null, and null values " &
                                                              "are not allowed.", value))
            End If

            mstrValue = value
        End Set
    End Property

    Private mintMinLength As Integer
    ''' <summary>
    ''' The minimum number of characters in this <see cref="BoundedString" />.
    ''' </summary>
    Public Property MinLength() As Integer
        Get
            Return mintMinLength
        End Get

        Private Set(value As Integer)
            mintMinLength = value
        End Set

    End Property

    Private mintMaxLength As Integer
    ''' <summary>
    ''' The maximum number of characters in this <see cref="BoundedString" />.
    ''' </summary>
    Public Property MaxLength As Integer
        Get
            Return mintMaxLength
        End Get

        Private Set(value As Integer)
            mintMaxLength = value
        End Set
    End Property

    Private mblnAllowNull As Boolean
    ''' <summary>
    ''' Whether or not this <see cref="BoundedString" /> can represent a null value.
    ''' </summary>
    Public Property AllowNull As Boolean
        Get
            Return mblnAllowNull
        End Get

        Private Set(value As Boolean)
            mblnAllowNull = value
        End Set
    End Property

    Public Sub New(ByVal strValue As String,
                   ByVal intMaxLength As Integer)
        MinLength = 0
        MaxLength = intMaxLength
        AllowNull = False

        Value = strValue
    End Sub

    Public Sub New(ByVal strValue As String,
                   ByVal intMinLength As Integer,
                   ByVal intMaxLength As Integer)
        MinLength = intMinLength
        MaxLength = intMaxLength
        AllowNull = False

        Value = strValue
    End Sub

    Public Sub New(ByVal strValue As String,
                   ByVal intMinLength As Integer,
                   ByVal intMaxLength As Integer,
                   ByVal blnAllowNull As Boolean)
        MinLength = intMinLength
        MaxLength = intMaxLength
        AllowNull = blnAllowNull

        Value = strValue
    End Sub
End Class
于 2015-02-12T21:00:17.593 回答
-2

你有没有尝试过

Dim strBuff as String

另请参阅使用 VB.NET 在 .NET 中处理字符串

本教程解释了如何使用 VB.NET 在 .NET 中表示字符串,以及如何在 .NET 类库类的帮助下使用它们。

于 2010-02-21T08:57:21.140 回答