Comment puis-je déclarer une chaîne comme ceci:
Dim strBuff As String * 256
dans VB.NET?
Utilisez l'attribut VBFixedString. Voir les infos MSDN ici
<VBFixedString(256)>Dim strBuff As String
Cela dépend de ce que vous avez l'intention d'utiliser la chaîne. Si vous l'utilisez pour l'entrée et la sortie de fichier, vous pouvez utiliser un tableau d'octets pour éviter les problèmes d'encodage. Dans vb.net, une chaîne de 256 caractères peut comporter plus de 256 octets.
Dim strBuff(256) as byte
Vous pouvez utiliser le codage pour transférer d'octets en chaîne.
Dim s As String
Dim b(256) As Byte
Dim enc As New System.Text.UTF8Encoding
...
s = enc.GetString(b)
Vous pouvez affecter 256 caractères à un octet à une chaîne si vous devez l’utiliser pour recevoir des données, mais le paramètre transmis peut être différent de vb.net de vb6.
s = New String(" ", 256)
En outre, vous pouvez utiliser vbFixedString. Je ne sais pas exactement ce que cela fait, cependant, car lorsque vous affectez une chaîne de longueur différente à une variable déclarée de cette façon, elle devient la nouvelle longueur.
<VBFixedString(6)> Public s As String
s = "1234567890" ' len(s) is now 10
Pour écrire ce code VB 6:
Dim strBuff As String * 256
Dans VB.Net, vous pouvez utiliser quelque chose comme:
Dim strBuff(256) As Char
Utilise stringbuilder
'Declaration
Dim S As New System.Text.StringBuilder(256, 256)
'Adding text
S.append("abc")
'Reading text
S.tostring
Cet objet peut être défini comme une structure avec un constructeur et deux propriétés.
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/
Vous pouvez utiliser Microsoft.VisualBasic.Compatibility
:
Imports Microsoft.VisualBasic.Compatibility
Dim strBuff As New VB6.FixedLengthString(256)
Mais il est marqué comme obsolète et spécifiquement pas pris en charge pour les processus 64 bits , écrivez donc votre propre copie qui réplique la fonctionnalité, qui consiste à tronquer lors de la définition de valeurs longues et le remplissage correct avec des espaces pour les valeurs courtes. Il définit également une valeur "non initialisée", comme ci-dessus, sur null.
Exemple de code provenant de LinqPad (que je ne parviens pas à autoriser Imports Microsoft.VisualBasic.Compatibility
je pense car il est marqué comme obsolète, mais je n’ai aucune preuve de cela):
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()
qui a cette sortie:
"\ 0\0\0\0\0"
"Test"
"Testi"
"Test"
"Testi"
Essaye ça:
Dim strbuf As New String("A", 80)
Crée une chaîne de 80 caractères contenant "AAA ...."
Ici, j'ai lu une chaîne de 80 caractères à partir d'un fichier binaire:
FileGet(1,strbuf)
lit 80 caractères dans strbuf ...