string을 byte의 배열에 넣고 싶습니다.

씨만 쓰다가 갑자기 비베로 개발을 하게 되었는데요..
첨써보는 비베라서 혼자서 난리치다가 도저히 안되겠어서 이렇게 써봅니다.
고수님들 제발 저에게 서광을 비춰주세요~


string을 byte의 배열에 넣고 싶습니다.
sData에 “ABCDE”를 넣으면 잘 들어가는데
sData에 “안녕하세요”를 넣으면 에러가 나는 이유는 도데체 왜일까요?
하루종일 이것때매 말썽이네요.ㅠ.ㅠ


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

         Dim sData As String
        Dim arrayB(256) As Byte
        Dim tmText As String


        sData = “안녕하세요”
        ‘sData = “ABCDE”



        Dim i As Integer


        For i = 1 To Len(sData)
            tmText = Mid(sData, i, 1)
            arrayB(i) = CByte(Asc(tmText))

        Next i

    End Sub



* 답변

Visual Basic 강좌와 팁에서 “바이트배열”로 검색해 보셨더라면… ^^;

—————————————-
 Dim buf() as Byte buf = StrConv(“가”, vbFromUnicode)
—————————————-


*답변

예. vb에서는 한글 2바이트가 통째로 1개로 취급되기 때문에 그렇습니다.

코드 보시면, Mid 함수를 써서 하나를 잘라낸 다음에, 아스키값으로 넣고 계시죠.
여기서 Mid 함수를 쓰면 tmText에는 ‘안’의 반쪽이 아닌 ‘안’이 들어가게 됩니다. (바이트로 따지면 2바이트)


아래 코드 실행해보세요. form만 하나 놓으시고.


Private Sub Form_Load()

    Dim bbb() As Byte
    bbb = StrConv(“abc”, vbFromUnicode)
    ‘bbb = StrConv(“안녕하세요”, vbFromUnicode)
   
    Dim idxTo As Long
    idxTo = UBound(bbb)
   
    Dim idxByte As Long
    For idxByte = 0 To idxTo
        Debug.Print bbb(idxByte)
    Next idxByte
   
    Erase bbb
   
End Sub


디버그창에 바이트 배열에 들어있는 값이 나오는데요(물론 아스키값으로)

strconv는 두번째 인수에 따라서 첫번째 인수에 있는 내용을 여러가지로 변환할 수 있습니다.
strconv(vb스트링, vbfromunicode) 라고 하면 vb스트링을 바이트 배열로 담을 수 있습니다. (되는지 몰랐는데, 되네요-_-;;)

거꾸로 strconv(바이트배열, vbunicode) 라고 하면 c에서 취급하는 바이트 배열 문자열(char[] 같은)을 vb스트링으로 변환할 수 있고요.


아실지도 모르지만, 첨이라고 하셔서 좀더 설명을 드리면.

vb에서 배열 하한이 무조건 0인 것은 아니지만, strconv 에서 반환하는 배열은 0베이스가 되고요.
변수를 동적으로 잡아놓으시면(dim bbb() as byte에서처럼 배열 개수를 적어주지 않음), 반환값에 따라서 자동으로 늘어납니다.

Ubound 함수는 배열의 상한 인덱스를 반환합니다-만, 위에서처럼 루프를 돌릴 때에는 ubound 값을 변수에 담은 후에 쓰세요.
저도 데브에서 본건데, ubound 함수 속도가 느리다고 하네요. 배열 아이템이 많을 때는 상당한 부하가! (-0-)

음. vb에서 동적 배열은 erase 배열이름 해서 지울 수 있습니다. ^^*

string을 byte의 배열에 넣고 싶습니다.”의 하나의 댓글.

  1. [거꾸로 strconv(바이트배열, vbunicode) 라고 하면 c에서 취급하는 바이트 배열 문자열(char[] 같은)을 vb스트링으로 변환할 수 있고요.] 도움 받고 갑니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다