我该如何声明一个像这样的字符串:
Dim strBuff As String * 256
在VB.NET中如何实现?
我该如何声明一个像这样的字符串:
Dim strBuff As String * 256
在VB.NET中如何实现?
这取决于您打算如何使用字符串。如果您要用它进行文件输入和输出,可能需要使用字节数组以避免编码问题。在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(6)> Public s As String
s = "1234567890" ' len(s) is now 10
Dim strBuff As String * 256
Dim strBuff(256) As Char
'Declaration
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
Microsoft.VisualBasic.Compatibility
:Imports Microsoft.VisualBasic.Compatibility
Dim strBuff As New VB6.FixedLengthString(256)
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"
"测试"
"Testi"
"测试"
"Testi"
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/
试试这个:
Dim strbuf As New String("A", 80)
FileGet(1,strbuf)
Dim a as string
a = ...
If a.length > theLength then
a = Mid(a, 1, theLength)
End If
你试过了吗?
Dim strBuff as String
还可以查看使用VB.NET在.NET中处理字符串
本教程解释了如何使用VB.NET在.NET中表示字符串,以及如何借助.NET类库类处理它们。
这个还没有完全测试,但是这里有一个类可以解决这个问题:
''' <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
strBuff
设置为空字符串("")仍会产生一个带有256个空格的字符串。但这个.NET等效物则不会。该注释似乎主要用于提供信息,并且在大多数情况下并未强制执行字符串长度(我认为FilePut使用此信息)。 - ChristopheD