본문 바로가기

쓰기


작업중인 코드이며 완벽하게 작동 되지 않는 코드입니다.

 

 '정수값을 이진 문자열로 변환
Function DecToBin(byteDec As Double)
    Dim sBin As String '이진 문자열
    Dim nTemp As Double '임시 값 저장소
   
    '변수에 값 입력
    nTemp = byteDec
   
    '2진 문자열 생성
    Do While nTemp >= 1
        '인수 분해 시작
        sBin = CStr(nTemp Mod 2) & sBin
        nTemp = Int(nTemp / 2)
    Loop
   
    '리턴 값 출력
    DecToBin = sBin
End Function

'이진 문자열을 정수값으로 변환
Function BinToDec(sDec As String)
    Dim nTemp As Double '임시 값 저장소
    Dim nCount As Integer '카운터
   
    '카운터 초기화
    nCount = 0
   
    '2진 문자열 생성
    Do While nCount < Len(sDec)
        '정수값 산출 시작
        nTemp = nTemp + (CDbl(Mid(sDec, Len(sDec) - nCount, 1)) * (2 ^ nCount))
   
        '카운터 증가
        nCount = nCount + 1
    Loop
   
    '리턴 값 출력
    BinToDec = nTemp

End Function

'Or 연산 수행
Function calcOr(nInput1 As Double, nInput2 As Double)
    Dim sData1 As String '입력 데이터1
    Dim sData2 As String '입력 데이터2
    Dim nCount As Integer '카운터
    Dim sTemp As String '임시 스티링
   
    '2진 스트링으로 변환
    sData1 = DecToBin(nInput1)
    sData2 = DecToBin(nInput2)
   
    '32비트로 변환
    sData1 = String(32 - Len(sData1), "0") & sData1
    sData2 = String(32 - Len(sData2), "0") & sData2
   
    '32비트 Or 연산 수행(한자리씩 비교)
    For nCount = 1 To 32
       
        If Mid(sData1, nCount, 1) = 1 Or Mid(sData2, nCount, 1) = 1 Then
            sTemp = sTemp + "1"
        Else
            sTemp = sTemp + "0"
        End If
    Next
   
    '리턴 값 출력
    calcOr = BinToDec(sTemp)
End Function

'32비트 좌측 시프트 연산 수행
Function ShiftLeft(nInput As Double, nShift As Integer)
    Dim sData As String '작업용 데이터
    Dim sValue As String '임시 출력 값
   
    '이진 변환
    sData = DecToBin(nInput)
   
    '32비트 변환
    sData = String(32 - Len(sData), "0") & sData
   
    '시프트 연산 수행
    sValue = Mid(sData, nShift + 1, Len(sData))
   
    '32비트 변환
    sValue = sValue & String(32 - Len(sValue), "0")
   
    '리턴 값 출력
    ShiftLeft = BinToDec(sValue)

End Function

'32비트 우측 시프트 연산 수행
Function ShiftRight(nInput As Double, nShift As Integer)
    Dim sData As String '작업용 데이터
    Dim sValue As String '임시 출력 값
   
    '이진 변환
    sData = DecToBin(nInput)
   
    '32비트 변환
    sData = String(32 - Len(sData), "0") & sData
   
    '시프트 연산 수행
    sValue = Mid(sData, 1, Len(sData) - nShift)
   
    '32비트 변환
    sValue = String(32 - Len(sValue), "0") & sValue
   
    '리턴 값 출력
    ShiftRight = BinToDec(sValue)
   
End Function

'해쉬 만들기
Function makeHash(arrInput() As Byte)
    Dim nCount As Integer '카운터
    Dim nTemp As Double '임시 데이터
   
    'arrInput 배열은 바이트 배열이며 하나의 배열안에 8비트의 데이터가 들어 있음
   
    '변수 초기화
    nCount = 0
    nTemp = 0
   
    '해쉬 만들기
    Do While nCount <= UBound(arrInput)
       
        'nTemp = calcOr(((nTemp * 128) Mod (2 ^ 32)), (nTemp / 128)) + arrInput(nCount) '작동 안됨(Mod (2 ^ 32) 연산 수행시 오류)
       
        '실제 해쉬 만들기 작업
        nTemp = calcOr(ShiftLeft(nTemp, 7), ShiftRight(nTemp, 7)) + arrInput(nCount)
       
        '배열 카운터 증가
        nCount = nCount + 1
    Loop
   
    '리턴 값 출력
    makeHash = nTemp

End Function

 
Sub testHash()
    Dim toolCharset As New ChilkatCharset2 '문자 인코딩 변환 툴 로드
    Dim sTemp As String
    Dim arrByte() As Byte
   
    '테스트 문자
    sString = "000"
   
    toolCharset.FromCharset = "unicode" '입력언어에서
    toolCharset.ToCharset = "shift_jis" 'Shift-JIS 로
   
    'Shift-JIS로 인코딩 변환 수행
    sTemp = toolCharset.ConvertData(sString)
   
    '배열 초기화
    ReDim arrByte(LenB(sTemp))
   
    '8비트씩 배열에 할당
    arrByte() = sTemp
   
    '해쉬 실행
    testHash = CStr(makeHash(arrByte()))
   
End Sub


조회 수 :
9022
등록일 :
2009.01.05
11:12:27
엮인글 :
https://arallab.hided.net/4197/a16/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/4197
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 2008-08-03 155439
64 Talk XML 파싱 부분에 문제가 하나 있네요. Hide_D 2009-12-30 15772
63 Talk [소스] ATPluginFrame 프레임워크 20100101 테스트 버전 file whoami 2010-01-01 17564
62 Talk 0.3 Filter 간추려서 정리좀 해봤습니다. [1] file Hide_D 2010-01-01 17301
61 Talk 문자열의 길이를 반영하는 '필터' [4] Hide_D 2010-01-19 15027
60 Talk 문자열 길이에 대한 건의 file G2m 2010-01-21 15608
59 Talk 뭐라고 설명해야할까요 -_-; 하여간 설명 file G2m 2010-01-21 22598
58 Talk 어떤 정신나간 게임은 UTF-32를 쓰네요 -_-;; [1] Hide_D 2010-01-30 19284
57 Talk '잡담인데' [2] FrigateBird 2010-02-22 23212
56 Talk Hide_D's Todo List [1] Hide_D 2010-03-01 19791
55 Talk 아랄3 디버깅이 말이죠... [2] file JKLeetro 2010-04-20 35689
54 Talk FixLine 버그 발생 [1] Hide_D 2010-04-25 23382
53 Talk 0.3님 제발 자비좀[.....] [2] G2m 2010-05-05 29951
52 Talk ATS의 문제점.. Hide_D 2010-05-15 23578
51 Talk 0.3님 제발 자비좀[.....] file 아무개 2010-05-23 31299
50 Talk 6월 1일 2시 챗던 Talk Hide_D 2010-06-01 18098
49 Talk 번역 모듈로 인터넷을 이용하는 방법. Hide_D 2010-06-04 30170
48 Talk [0.2] OnPluginInit단에서 스레드를 만들 때 [회피법] Hide_D 2010-06-23 27118
47 Talk AT 0.2에서 내부 버퍼가 4096을 넘을 수 있어야 합니다. [1] Hide_D 2010-07-13 34245
46 Talk ATCustom - 함수 Reference [47] Hide_D 2010-07-20 103937
45 Talk ATCustom - 프로젝트 소개 [8] Hide_D 2010-07-22 32701