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

发布于 2024-08-22 07:32:57 字数 91 浏览 7 评论 0原文

声明这样的字符串:

Dim strBuff As String * 256

如何在 VB.NET 中

How do i Declare a string like this:

Dim strBuff As String * 256

in VB.NET?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

忆离笙 2024-08-29 07:32:57

使用 VBFixedString 属性。请参阅此处的 MSDN 信息

<VBFixedString(256)>Dim strBuff As String

Use the VBFixedString attribute. See the MSDN info here

<VBFixedString(256)>Dim strBuff As String
滥情哥ㄟ 2024-08-29 07:32:57

这取决于您打算使用该字符串做什么。如果您将其用于文件输入和输出,您可能需要使用字节数组来避免编码问题。在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

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.

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.

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(6)> Public s As String
s = "1234567890" ' len(s) is now 10
第七度阳光i 2024-08-29 07:32:57

要编写此 VB 6 代码:

Dim strBuff As String * 256

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

Dim strBuff(256) As Char

To write this VB 6 code:

Dim strBuff As String * 256

In VB.Net you can use something like:

Dim strBuff(256) As Char
转角预定愛 2024-08-29 07:32:57

使用字符串生成器

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

Use stringbuilder

'Declaration   
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
南汐寒笙箫 2024-08-29 07:32:57

试试这个:

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

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

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

    FileGet(1,strbuf)

将 80 个字符读入 strbuf...

Try this:

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

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

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

    FileGet(1,strbuf)

reads 80 characters into strbuf...

離人涙 2024-08-29 07:32:57

您可以使用 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”
“测试”
“睾丸”
“测试”
“睾丸”

You can use 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.

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

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()

which has this output:

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

魔法唧唧 2024-08-29 07:32:57

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

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/摆脱vb6-compatibility-references/

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

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/

﹉夏雨初晴づ 2024-08-29 07:32:57

您是否尝试过

Dim strBuff as String

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

本教程介绍了如何
使用 VB.NET 表示 .NET 中的字符串
以及如何与他们合作
.NET 类库类的帮助。

Have you tried

Dim strBuff as String

Also see Working with Strings in .NET using VB.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.

2024-08-29 07:32:57
Dim a as string

a = ...

If a.length > theLength then

     a = Mid(a, 1, theLength)

End If
Dim a as string

a = ...

If a.length > theLength then

     a = Mid(a, 1, theLength)

End If
原来是傀儡 2024-08-29 07:32:57

这还没有经过充分测试,但这里有一个类来解决这个问题:

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

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

''' <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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文