I'm converting some code from C# to VB.NET. I have the following line in C#
var bytes = new byte[password.Length * sizeof(char)];
Looking on MSDN it appears that VB.NET does not seem to have the sizeof
operator. I understand there is a Marshal.SizeOf
but further MSDN documentation states that the value returned can be different to that of sizeof
.
Can anybody help? Is there an equivalent statement in VB.NET?
Additional Information
My aim is to convert a password into an array of bytes which I can then hash and then either store in a database or compare to a previously stored hash. But I don't necessarily want an answer relating to my particular situation.
Dim bytes(password.Length * xxx) As Byte
System.Buffer.BlockCopy(password.ToCharArray(), 0, bytes, 0, bytes.Length)
Dim sha512 = System.Security.Cryptography.SHA512.Create()
Dim hash = sha512.ComputeHash(bytes)
' compare hash or stroe in database
Looking on MSDN it appears that VB.NET does not seem to have the sizeof operator. I understand there is a Marshal.SizeOf but further MSDN documentation states that the value returned can be different to that of sizeof. Can anybody help? Is there an equivalent statement in VB.NET?
[Supported in the .NET Framework 4.5.1 and later versions] Returns the size of an unmanaged type in bytes. SizeOf<T>(T) [Supported in the .NET Framework 4.5.1 and later versions] Returns the unmanaged size of an object of a specified type in bytes. SizeOf(Object) Caution SizeOf(Object) may be unavailable in future releases.
SizeOf<T>() [Supported in the .NET Framework 4.5.1 and later versions] Returns the size of an unmanaged type in bytes. public: generic <typename T> static int SizeOf(); public static int SizeOf<T> (); static member SizeOf : unit -> int Public Shared Function SizeOf(Of T) () As Integer Type Parameters T The type whose size is to be returned.
[Supported in the .NET Framework 4.5.1 and later versions] Returns the unmanaged size of an object of a specified type in bytes. SizeOf(Object)
The 'Len' operator in VB will do this (but it works on instances, so you need to adjust accordingly):
Dim bytes = New Byte((someString.Length * Len(New Char)) - 1){}
VB.NET's Char
maps to .NET's System.Char
, which is defined in ECMA 335 to be a 16-bit Unicode character. Meaning, Char
has a fixed size (no matter on which platform you compile or run your code), you don't actually need sizeof
.
Therefore, just multiply by 2
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With