(NET) NET (2012)

Робота з байтами у VB.NET - ChrW, BitConverter.ToInt32, Convert.ToInt32, Byte.Parse, ToString("X2") / AllowHexSpecifier, GetBytes/GetString, New Byte(N) {}, UInt32 = &H33.


Це сторінка для самих початковців. На неї я опишу усі головні функції роботи з байтами у Бейсіці. Голові можливості Бейсіка підкреслені нище червоним колором. Якщо ви зможете написати першу функцию на Бейсіці без того, щоб подивитися у Інтернет - вважайте, що ви зрозуміли як працювати з байтами, символами та строками.



Почнемо з самої важкої функції - вона утворює різноманітни випадкові паролі. Усе починаеться з випадкового числа. І звичайно, деякі літери можливо вилучити в результату, бо наприклад, вони заважають подивитися на текст браузером (або з інших причин).


  91:      Public Function GetRandomInteger(MaxValue As Integer) As Integer
  92:          Dim byte_count As Byte() = New Byte(3) {}
  93:          Dim random_number As New System.Security.Cryptography.RNGCryptoServiceProvider()
  94:          random_number.GetBytes(byte_count)
  95:          Return (Math.Abs(BitConverter.ToInt32(byte_count, 0)) / Int32.MaxValue) * MaxValue
  96:      End Function
  97:   
  98:      Public Function CreateRandomPassword(Len As String, Optional FromChagCode As UInt32 = &H33, Optional ToCharCode As UInt32 = &H7E, Optional ExcludeChars As String = "<>") As String
  99:          Dim Ret1 As New System.Text.StringBuilder
 100:          While Ret1.Length < Len
 101:              Dim RandomNum As Integer = FromChagCode + GetRandomInteger(ToCharCode - FromChagCode)
 102:              Dim OneChar As Char = ChrW(RandomNum)
 103:              If Not ExcludeChars.Contains(OneChar) Then
 104:                  Ret1.Append(OneChar)
 105:              End If
 106:          End While
 107:          Return Ret1.ToString
 108:      End Function

Копистуватися фукцією просто:


 113:          PassTextBox.Text = CreateRandomPassword(RandomPasswordLength)

Сторінка вийшлу дуже коротка, тому я додам сюда ще пару своїх корисних функцій для перетворення символів та байтів у строку. Ці дві функції виконують серіалізацію байтів у строку й навпаки строку у байти.



  58:      <Extension()>
  59:      Public Function BytesToHex(ByVal InputBytes As Byte()) As String
  60:          Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
  61:          For i As Integer = 0 To InputBytes.Length - 1
  62:              sb.Append(InputBytes(i).ToString("X2"))
  63:          Next
  64:          Return sb.ToString()
  65:      End Function
  66:   
  67:      <Extension()>
  68:      Public Function HexStringToBytes(ByVal InputStr As String) As Byte()
  69:          Dim ButeArrLength As Integer = (InputStr.Length + 1) / 2 
  70:          Dim OutArr(ButeArrLength) As Byte, I As Integer, OneByte As Byte
  71:          For I = 0 To InputStr.Length / 2 - 1
  72:              OneByte = Byte.Parse(InputStr.Substring(I * 2, 2), Globalization.NumberStyles.AllowHexSpecifier)
  73:              OutArr(I) = OneByte
  74:          Next
  75:          ReDim Preserve OutArr(I - 1)
  76:          Return OutArr
  77:      End Function

Наступна функція дуже корисна, коли строка має спеціфічні символи, які неможна побачити, або які частково взагалі усікаються.



  48:      <Extension()>
  49:      Public Function ToHexString(ByVal Input As String) As String
  50:          Dim InputBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(Input)
  51:          Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
  52:          For i As Integer = 0 To InputBytes.Length - 1
  53:              sb.Append(InputBytes(i).ToString("X2"))
  54:          Next
  55:          Return sb.ToString()
  56:      End Function

Наступна функція теж дуже корисна, коли треба отримати звичайні байти замість Stream. Наприклад візьмемо будь який Stream.



Ви можете почитати його як Stream


 104:      Public Function ReadResource(ResourceName As String) As Byte()
 105:          Dim Asm1 As Assembly = Assembly.GetExecutingAssembly()
 106:          Dim Stream1 As IO.Stream = Asm1.GetManifestResourceStream(ResourceName)
 107:          Return Stream1.ToByteArray
 108:      End Function

і далі зробити з цього байтового потоку що завгодно.


   5:      <Extension()>
   6:      Public Function ToByteArray(ByVal stream As IO.Stream) As Byte()
   7:          stream.Position = 0
   8:          Dim buffer As Byte() = New Byte(stream.Length - 1) {}
   9:          Dim totalBytesCopied As Integer = 0
  10:   
  11:          While totalBytesCopied < stream.Length
  12:              totalBytesCopied += stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied)
  13:          End While
  14:   
  15:          Return buffer
  16:      End Function

Наприклад нище я бажаю подивитися на визначення полей у базі EF.



Вони читаються як Stream, а потім з потока байтів за допомогою GetString утворюється строка.



Зрозуміло, що й навпаки будь яка строка у будь який момент може бути перетворена на набор байтів, як це зроблено багато разів вище.




Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19
Link to this page: http://www.vb-net.com/RandomPassword/Index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <MAIL ME>  <ABOUT ME>  < THANKS ME>