Как объявить строку следующим образом:
Dim strBuff As String * 256
в VB.NET?
Как объявить строку следующим образом:
Dim strBuff As String * 256
в VB.NET?
Используйте атрибут VBFixedString. См. Информацию MSDN здесь
<VBFixedString(256)>Dim strBuff As String
Это зависит от того, на что вы собираетесь использовать строку. Если вы используете его для ввода и вывода файлов, вы можете использовать массив байтов, чтобы избежать проблем с кодировкой. В 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
Чтобы написать этот код VB 6:
Dim strBuff As String * 256
В VB.Net вы можете использовать что-то вроде:
Dim strBuff(256) As Char
Использовать stringbuilder
'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)
Но он помечается как устаревшим и специально не поддерживается для 64-битных процессов, поэтому напишите свой собственный, который повторяет функции, которые должны усекать при установке длинных значений и заполнении справа с пробелами для коротких значений. Он также устанавливает "неинициализированное" значение, как указано выше, в nulls.
Пример кода из 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"
"Тест"
"Тести"
"Тест"
"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)
Создает строку с 80 символами, заполненную "AAA...."
Здесь я прочитал строку из 80 символов из двоичного файла:
FileGet(1,strbuf)
читает 80 символов в strbuf...
Вы пробовали
Dim strBuff as String
Также см. Работа со строками в .NET с помощью VB.NET
В этом руководстве объясняется, как представляют строки в .NET с использованием VB.NET и как работать с ними с помощь классов библиотеки классов .NET.
Dim a as string
a = ...
If a.length > theLength then
a = Mid(a, 1, theLength)
End If
Это не было полностью протестировано, но вот класс для решения этой проблемы:
''' <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