如何在 VB.NET 中声明一个固定长度的字符串?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2305377/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 14:42:58  来源:igfitidea点击:

How to declare a fixed-length string in VB.NET?

vb.netvb6-migration

提问by Rachel

How do i Declare a string like this:

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

Dim strBuff As String * 256

in VB.NET?

在 VB.NET 中?

回答by Spencer Ruport

Use the VBFixedString attribute. See the MSDN info here

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

<VBFixedString(256)>Dim strBuff As String

回答by xpda

It depends on what you intend to use the string for. If you are using it for file input and output, you might want to use a byte array to avoid encoding problems. In vb.net, A 256-character string may be more than 256 bytes.

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

Dim strBuff(256) as byte

You can use encoding to transfer from bytes to a string

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

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

You can assign 256 single-byte characters to a string if you need to use it to receive data, but the parameter passing may be different in vb.net than vb6.

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

s = New String(" ", 256)

Also, you can use vbFixedString. I'm not sure exactly what this does, however, because when you assign a string of different length to a variable declared this way, it becomes the new length.

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

<VBFixedString(6)> Public s As String
s = "1234567890" ' len(s) is now 10

回答by Dr.Optix

To write this VB 6 code:

要编写此 VB 6 代码:

Dim strBuff As String * 256

In VB.Net you can use something like:

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

Dim strBuff(256) As Char

回答by Prince Waleed

Use stringbuilder

使用字符串生成器

'Declaration   
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring

回答by Gawie

Try this:

尝试这个:

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

Creates a 80 character string filled with "AAA...."'s

创建一个 80 个字符的字符串,其中包含“AAA....”

Here I read a 80 character string from a binary file:

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

    FileGet(1,strbuf)

reads 80 characters into strbuf...

将 80 个字符读入 strbuf ...

回答by Mark Hurd

You can use Microsoft.VisualBasic.Compatibility:

您可以使用Microsoft.VisualBasic.Compatibility

Imports Microsoft.VisualBasic.Compatibility

Dim strBuff As New VB6.FixedLengthString(256)

But it's marked as obsolete and specifically not supported for 64-bit processes, so write your own that replicates the functionality, which is to truncate on setting long values and padding right with spaces for short values. It also sets an "uninitialised" value, like above, to nulls.

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

Sample code from LinqPad (which I can't get to allow Imports Microsoft.VisualBasic.CompatibilityI think because it is marked obsolete, but I have no proof of that):

来自 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), "
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
") & """" 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()

which has this output:

有这个输出:

"\0\0\0\0\0"
"Test "
"Testi"
"Test "
"Testi"

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

回答by Kanad Mehta

This object can be defined as a structure with one constructor and two properties.

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

Dim a as string

a = ...

If a.length > theLength then

     a = Mid(a, 1, theLength)

End If

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

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

回答by ByongSub

''' <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

回答by Daniel Neel

This hasn't been fully tested, but here's a class to solve this problem:

这还没有经过全面测试,但这里有一个类可以解决这个问题:

Dim strBuff as String

回答by Adriaan Stander

Have you tried

你有没有尝试过

##代码##

Also see Working with Strings in .NET using VB.NET

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

This tutorial explains how to represent strings in .NET using VB.NET and how to work with them with the help of .NET class library classes.

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