Smart Box
[VB.net] Bytes to Hex String / Hex String to Bytes 본문
컴퓨터 주변 기기에 관한 코딩을 하다보니, Byte 배열로 통신을 하더라구요.
디버깅을 하기 위해서는 눈으로 값을 직접 봐야하니 Hex String으로 바꾸는 경우가 많습니다.
그래서 이번 포스팅에서는 16진법 문자열(Hex String)와 바이트 배열(Byte Array)를 넘어다니는 함수를 알려드리겠습니다.
[Hex String to Byte Array]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | Public Function HexStringToBytes(ByVal HexString As String) As Byte() 'Quick and dirty hex String to Byte array. Accepts: ' ' "HH HH HH" ' "HHHHHH" ' "H HH H" ' "HH,HH, HH" and so on. Dim Bytes() As Byte Dim HexPos As Long Dim HexDigit As Long Dim BytePos As Long Dim Digits As Long ReDim Bytes(Len(HexString) \ 2) For HexPos = 1 To Len(HexString) HexDigit = InStr("0123456789ABCDEF", UCase$(Mid$(HexString, HexPos, 1))) - 1 If HexDigit >= 0 Then If BytePos > UBound(Bytes) Then ReDim Preserve Bytes(UBound(Bytes) + 4) End If Bytes(BytePos) = Bytes(BytePos) * &H10 + HexDigit Digits = Digits + 1 End If If Digits = 2 Or HexDigit < 0 Then If Digits > 0 Then BytePos = BytePos + 1 Digits = 0 End If Next If Digits = 0 Then BytePos = BytePos - 1 If BytePos < 0 Then Bytes = {} Else ReDim Preserve Bytes(BytePos) End If Return Bytes End Function | cs |
해당 소스는 주석에서 설명했듯이, 여러 경우를 받아드립니다.
'HH HH' 이렇게 2개를 간격으로 떨어져있거나, 'HHHH' 이렇게 붙어 있어도 제대로 변환합니다.
심지어 사이 간격에 16진수가 아닌 다른 문자열이 있어도 구분합니다.
[Byte Array to Hex String]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Public Function BytesToHexString(ByRef ByteArray() As Byte) As String Dim lb As Long, ub As Long Dim l As Long, strRet As String Dim lonRetLen As Long, lonPos As Long Dim strHex As String lb = LBound(ByteArray) ub = UBound(ByteArray) lonRetLen = ((ub - lb) + 1) * 2 strRet = Space$(lonRetLen) lonPos = 1 For l = lb To ub strHex = Hex$(ByteArray(l)) If Len(strHex) = 1 Then strHex = "0" & strHex If l <> ub Then Mid$(strRet, lonPos, 2) = strHex lonPos = lonPos + 2 Else Mid$(strRet, lonPos, 2) = strHex End If Next l Return strRet End Function | cs |
이 부분에서는 설명드릴게 없네요.
잘 사용하시기 바랍니다 :P
'Programming > VB.net' 카테고리의 다른 글
[VB.net] String to Byte array / Byte array to String (String에서 Byte 배열로) (0) | 2017.06.11 |
---|---|
[VB.net] Twitch2Afreeca - Twitch 방송제목을 Afreeca TV 방송제목으로! (0) | 2017.05.29 |
[VB.net] 폴더 내에 있는 모든 파일, 폴더 경로 불러오기 (재귀함수, FileSystemObject) (0) | 2017.05.27 |
[VB.net] 커서가 가르키는 곳 색상 알아내기(Thread, GetDC, GetPixel) 예제 (2) | 2015.01.29 |
[VB.net] VB6에서 보던 Winsock 컨트롤을 직접 제작해보았습니다. (0) | 2015.01.18 |
Comments