본문 바로가기

쓰기

 // Test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include <stdio.h>
#include <tchar.h>
#include <math.h>

typedef unsigned int UINT;

struct BoolArray{
    bool Data[32];
};

BoolArray NewBoolArray();

UINT Algorithm(char * szSource);
BoolArray Plus(BoolArray arSource,char cAdd);
BoolArray Shift(BoolArray arSource,int nSize);
BoolArray Or(BoolArray ar1,BoolArray ar2);
UINT RetArray(BoolArray arTmp);

const int rotateBy=7;

int main(int argc, char* argv[])
{
    char * szText = "Test Text";
    UINT uAnswer = Algorithm(szText);

    printf("%un",uAnswer);
    return 0;
}

UINT Algorithm(char * szText)
{
    UINT uRet=0;
    BoolArray arTemp = NewBoolArray();
    int nSize = strlen(szText); //길이를 구했음
    for(int i=0;i<nSize;i++)
    {
        arTemp = Plus(Or(Shift(arTemp,rotateBy),Shift(arTemp,rotateBy-32)),szText[i]);
        //문제의 그 연산 -_-;
    }
    return RetArray(arTemp);
}

//초기화 함수입니다. VB에선 자동으로 해줄듯 -_-;
BoolArray NewBoolArray()
{
    BoolArray arTemp;
    for(int i=31;i>=0;i--)
    {
        arTemp.Data[i]=0;
    }
    return arTemp;
}

BoolArray Plus(BoolArray arSource,char cAdd)
{

    //숫자를 더합니다...

    int nTemp = cAdd; //귀찮아서 미리 변환 -_-

    //일단 변환
    BoolArray arChar = NewBoolArray();
    //pow(a,b)는 a^b와 동일합니다.
    int nPow=(float)pow((float)2,8);
    int nPow2=nPow/2;
    for(int i=7;i>=0;i--)
    {
        if((nTemp%nPow)/nPow2>0)
        {
            arChar.Data[i]=1;
        }
        nPow = nPow2;
        nPow2 = nPow/2;
    }

    //더하기 -_-;
    BoolArray arRet = NewBoolArray();
    int nFlag=0;
    for(int i=0;i<32;i++)
    {
        int nTemp= nFlag+arChar.Data[i]+arSource.Data[i];
        if(nTemp>1)
            nFlag=1;
        else
            nFlag=0;

        if(nTemp%2==1)
            arRet.Data[i]=1;
        else
            arRet.Data[i]=0;
    }

    return arRet;
}

//Shift연산입니다. +면 <<, -면 >>입니다.
BoolArray Shift(BoolArray arSource,int nSize)
{
    BoolArray arRet=NewBoolArray();

    for(int i=0;i<32;i++)
    {
        int nTemp=i+nSize;
        if(0<=nTemp&&nTemp<32)
        {
            arRet.Data[nTemp]=arSource.Data[i];
        }
    }

    return arRet;
}

//Or연산입니다.
BoolArray Or(BoolArray ar1,BoolArray ar2)
{
    BoolArray arRet = NewBoolArray();

    for(int i=0;i<32;i++)
    {
        if(ar1.Data[i] != 0 || ar2.Data[i] != 0)
        {
            arRet.Data[i]=1;
        }
    }
    return arRet;
}
UINT RetArray(BoolArray arTmp)
{
    UINT uRet=0;
    for(int i=31;i>=0;i--)
    {
        uRet = uRet * 2;
        if(arTmp.Data[i]==1)
        {
            uRet = uRet + 1;
        }
    }
    return uRet;
}


원본 코드가 단지
typedef unsigned int HASH;

//---------------------------------------------------------
// sample hash creation functions
//---------------------------------------------------------
inline HASH HashRotateLeft( HASH hash, const unsigned int rotateBy )
{
    return (hash<<rotateBy)|(hash>>(32-rotateBy));
}

//---------------------------------------------------------
// create a hash from a string
//---------------------------------------------------------
template<typename T>
inline HASH MakeStringHash( const T *pString )
{
    HASH        ret = 0;
    T            c;

    if( pString )
    {
        while( c=*(pString++) )
            ret = HashRotateLeft(ret,7) + c;
    }
    return ret;
}

이것뿐이란걸 생각해보면 그냥 후덜덜 하군요.


아. 혹시나 해서 이 게시물의 의미에 대해서 설멍
VB로 위의 MakeStringHash함수를 옮겨야 하는데,
VB에서는 비트 연산자가 없기 때문에 -_-;;
일일히 기본 연산을 가지고 처리하도록 새로만든 함수입니다.

완성된 내용은 VB로 저 내용을 간단히 옮길 수 있으....리라고 봅니다만,
어떨지는 모르겠습니다.
분류 :
Talk
조회 수 :
10779
등록일 :
2009.01.05
16:14:17
엮인글 :
https://arallab.hided.net/4199/48a/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/4199

HaruKaze

2009.01.05
16:28:06
감사합니다.....(_ _)

이렇게 풀어서 다시 짜주시다니...ㅠ.ㅠ
 
머리 아프셨을텐데 정말 정말 감사드립니다...(_ _)

HaruKaze

2009.01.05
18:30:52
드디어 완성했습니다...ㅠ.ㅠ

조만간 커스텀스크립트용 번역툴을 만들어서 배포하겠습니다.


감사합니다....(_ _)

Hide_D

2009.01.05
16:29:03
아마 기호랑 명령어만 좀 고치면
VB로 바로 쓸수 있을거에요
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 2008-08-03 155437
104 Talk ezTransXP의 다이얼로그 파일의 h,cpp가 누락되어있습니다. [1] Hide_D 2009-01-10 12415
103 Talk 코드정리 목록 + 코드 secret sizukana 2009-01-17 6
102 Talk 버그 확인 목록 [4] Hide_D 2009-03-06 12347
101 Talk FixLine 기능 추가 [1] Hide_D 2009-03-13 11416
100 Talk 번역 플러그인 난해한 문제???? [3] 호기 2009-03-15 14864
99 Talk 히데님이 부탁하신거.... [1] file 류제로 2009-03-21 19458
98 Talk FixLine '인수 추가' 창 새 디자인 [4] file Hide_D 2009-03-26 18340
97 Talk 아나 ㅅㅂ VS2008 안쓸랍니다. [5] Hide_D 2009-04-02 12867
96 Talk 참 오묘한 윈도우~ 호기 2009-04-04 13568
95 Talk AralTrans 필터 물갈이할 예정입니다.... [1] Hide_D 2009-05-21 14725
94 Talk 한글 조사 처리 [1] Hide_D 2009-05-23 12783
93 Talk 정식 아랄 플러그인으로 요청하시고 싶다면 Hide_D 2009-07-10 14234
92 Talk FixLine v2 길이제한 '원문 길이' 버그 Hide_D 2009-07-27 12853
91 Talk [소스] ConsoleTrans + 질문 [1] file Hide_D 2009-08-11 13001
90 Talk QuickTrans2 자료 백업 file Hide_D 2009-08-26 13246
89 Talk [질문] Http POST전송에 대한 이것저것 [3] 호기 2009-09-22 24751
88 Talk 튕기는 문제에 대해서 [6] Hide_D 2009-11-26 13286
87 Talk 고칠거? [10] Hide_D 2009-11-28 13651
86 Talk Windows7에서 0.3 현재시점으로 안돌아갑니다.ㅜ [6] Hide_D 2009-12-04 14656
85 Talk INNODB 테스트 Hide_D 2009-12-09 12769