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 배열이름 해서 지울 수 있습니다. ^^*

초급자를 위한 파일 입출력 실무

 이번 강좌에서는 이진파일(Binary File)의 예제를 하나 소개할까 합니다


#1강에서도 설명을 드렸다시피 이진파일은 라인단위가 아닌 블럭단위로 입출력을 하게 됩니다


또한 읽거나 쓴만큼 자동으로 다음 위치를 가리키게 됩니다


1. 프로그램을 실행 시키면 아래와 같은 화면이 보이게 됩니다


   여기서 <파일 생성> 버튼을 누르게 되면 현재 위치에 1024바이트의 NEW.BIN 파일이 만들어 지며


   파일은 모두 “X”로 채워지게 됩니다


   또한 100 번째 위치에 있는 값을 읽어와서 출력을 해보고 100 번째 있는 값을 공백문자(” “)로 바꾸어 보겠습니다


사용자 삽입 이미지


Option Explicit


——————————————————————————————–


<프로그램 종료> 버튼을 눌렀을때 실행됩니다


Private Sub cmd종료_Click()


    End


End Sub

——————————————————————————————–


<파일 생성> 버튼을 누르면 실행이 됩니다


Private Sub cmd파일생성_Click()


    Dim i%


    Dim ReadByte As Byte

    현재 경로에서 NET.BIN 파일을 이진형태로 엽니다. 또한 없으면 자동으로 생성이 됩니다


    Open App.Path & “\NEW.BIN” For Binary As #1

    For i = 1 To 1024                   1024 개를 파일에 저장합니다


        Put #1, , “X”              파일의 현재 위치에 “X”를 저장합니다. 두번째 값을 생략한 이유는… 파일을 처음 열면 자동으로


                                              1을 가리키기 때문


    Next i                                  아래에 있는 [그림-1]을 보시면 실제 파일에 어떻게 들어가 있는지 확인을 할 수 있습니다


   


    Get #1, 100, ReadByte    파일에서 100 번째 위치한 값을 ReadByte변수로 읽어들입니다


    MsgBox Hex(ReadByte)         읽어들인 값을 출력합니다 (16진수로 출력)


   


    Put #1, 100, ” ”             100 번째 위치에 공백문자(” “)를 출력한다


                                               아래에 있는 [그림-2]을 보시면 실제 파일에 어떻게 들어가 있는지  확인을 할 수 있습니다


    Get #1, 100, ReadByte   100 번째 위치에 있는 값을 읽는다


    MsgBox Hex(ReadByte)


    Close #1


   


    MsgBox “처리가 완료되었습니다”, vbInformation, “결과”


End Sub

——————————————————————————————–


Private Sub Form_Load()


    폼을 회면의 중앙에 출력한다 (함수는 모듈에 선언되어 있음)


    Call CenterForm(Me)


End Sub


[그림-1]

사용자 삽입 이미지

[그림-2]

사용자 삽입 이미지


특수키 막는 자바스크립트 소스 (HTML)

먼저 해당 코드값을 알아야 합니다.

Ctrl은 17

Alt는 18

그럼 스크립트에서

[CODE]
<script language=”JavaScript”>
<!–
function CtrlAlt() {
if (event.keyCode == 17) {
alert (“Ctrl 금지”);
return false;
}
if (event.keyCode == 18) {
alert (“Alt 금지”);
return false;
}
}
document.onkeydown = CtrlAlt;
//–>
</script>


[/CODE]

위에 소스에서 보면

document.onkeydown = CtrlAlt; 문서 안에서 키를 눌렀을때 함수 CtrlAlt를 실행 하고

함수 조건에 보면

Ctrl을 눌렀을때 event.keyCode == 17 //이벤트가 발생한 키의 코드값을 확인후 경고창을 띄웁니다.

Alt를 눌렀을때 event.keyCode == 18 //이벤트가 발생한 키의 코드값을 확인후 경고창을 띄웁니다.

키의 코드값에 대해서는 아래 링크를 참고 하세요(예제 43번)

코드


그럼 수고 하세요

오른쪽 마우스 버튼 사용 금지 시키는 자바스크립트

오른쪽 마우스 버튼 사용 금지 시키는 자바스크립트


[CODE]

<!–=================================================================*/
/*           SUBJECT : JAVASCRIPT TIP                                */
/*           WRITTEN : picacube.com                                  */
/*           CONTACT :
www.picacube.com, picacube@picacube.com       */
/*           UP-DATE : 2008-01-17                                    */
/*==================================================================–>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>소스 보기를 막는 예제</title>
<script language=”JavaScript”>
<!–
function handleMouseDown(e)
{
 if (navigator.appName == ‘Netscape’)
 {
  if(e.which == 3 || e.which == 2)
  {
   alert(“오른쪽 버튼은 사용할 수 없습니다!”);
   return false;
  }
 }
 else if (navigator.appName == ‘Microsoft Internet Explorer’)
 {
  if(event.button == 2 || event.button == 3)
  {
   alert(“오른쪽 버튼은 사용할 수 없습니다!”);
   return false;
  }
 }
 
  return true;
}


function handleKeyPress()
{
 alert(“키보드는 사용할 수 없습니다!”);
}


document.onmousedown = handleMouseDown;
document.onkeydown = handleKeyPress;
–>
</script>
</head>
<body oncontextmenu=”return false;” onselectstart=”return false;” ondragstart=”return false;”>
마우스 오른쪽 버튼과 키를 막아서 소스 보기를 할 수 없도록 하는 예제입니다.
</body>
</html>
[/CODE]