次のように文字列を宣言する方法:
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
文字列ビルダーを使用
'Declaration
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
このオブジェクトは、1つのコンストラクターと2つのプロパティを持つ構造体として定義できます。
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/
Microsoft.VisualBasic.Compatibility
を使用できます。
Imports Microsoft.VisualBasic.Compatibility
Dim strBuff As New VB6.FixedLengthString(256)
しかし、それは 廃止され、64ビットプロセスでは特にサポートされていません としてマークされているため、機能を複製する独自のコードを記述します。また、上記のように「初期化されていない」値をnullに設定します。
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」
「テスト」
「テスティ」
「テスト」
「テスティ」
これを試して:
Dim strbuf As New String("A", 80)
「AAA ....」で満たされた80文字の文字列を作成します
ここでは、バイナリファイルから80文字の文字列を読み取ります。
FileGet(1,strbuf)
80文字をstrbufに読み込みます...