본문 바로가기

쓰기


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

 

 '정수값을 이진 문자열로 변환
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/46a/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/4197
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 2008-08-03 155441
169 Archive ATPluginFrame 프레임워크 20090901 테스트 버전.. file whoami 2009-09-01 12897
168 OtherFiles [소스, 실행파일]MeCab을 독음 변환기로 사용한 예제 file Hide_D 2009-09-09 22691
167 OtherFiles 0.3 설정 xml 파일 예제 [4] file 아랄 2009-09-20 15532
166 Talk [질문] Http POST전송에 대한 이것저것 [3] 호기 2009-09-22 24751
165 Talk 튕기는 문제에 대해서 [6] Hide_D 2009-11-26 13286
164 Talk 고칠거? [10] Hide_D 2009-11-28 13651
163 Talk Windows7에서 0.3 현재시점으로 안돌아갑니다.ㅜ [6] Hide_D 2009-12-04 14656
162 Talk INNODB 테스트 Hide_D 2009-12-09 12769
161 Talk 0.3에서 전국란스의 경우 [1] Hide_D 2009-12-13 15179
160 Talk 필터도 아래에 Context를 추가할 수 있나요? [3] Hide_D 2009-12-14 11941
159 Talk 번역기(eztransXP)가 만드는 몇가지 문제들 - 1 [1] Hide_D 2009-12-16 13437
158 Talk 위키 링크 레벨업! [테스트] [12] Hide_D 2009-12-17 18387
157 Talk 파일을 다운로드 받을때 한가지 잠재적인 문제점을 발견했습니다. [2] Hide_D 2009-12-18 14677
156 Talk [질문]번역플러그인에서 필터후처리로 넘어갈때.. [1] 호기 2009-12-19 13285
155 Talk [오류?] 아랄0.3 실행하여 autofinder 적용시 오류인지... [1] file 암흑마제 2009-12-20 14512
154 Talk 0.2, 0.3에서 메모리 덮어쓰기 모드의 차이점 [2] file Hide_D 2009-12-20 16109
153 Archive [소스] ATPluginFrame 프레임워크 20091220 테스트 버전 [2] file whoami 2009-12-20 11847
152 Talk [오류] 확장자가 ats 인 파일 실행시 오류 납니다. [1] 암흑마제 2009-12-20 13360
151 Talk autorun.hta 파일 오류 스샷 입니다. [2] file 암흑마제 2009-12-20 18045
150 Talk 아랄0.3 20일자 업데이트 적용시 구동 스샷(반반??) [4] file 암흑마제 2009-12-21 13305