본문 바로가기

쓰기

 // 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/afd/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 [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
209 Talk VB용 커스텀스크립트 Hash 함수 [2] HaruKaze 9835   2009-01-05 2009-02-14 11:01
비주얼베이직에서 사용할 수 있는 커스텀스크립트 Hash 생성 함수입니다. 비주얼베이직에서는 이진 변환과 이진 연산을 할 수 없기 때문에 이진 변환과 연산을 할 수 있게 해주는 함수를 작성하여 만들었습니다. - 정수를 이진 문자열로 변환하는 함수 - 이진...  
208 Talk [질문] 번역플러그인에 관해... [2] 호기심맨 12729   2009-01-06 2009-01-06 09:12
Aral을 하다보면 한번 번역된 문장은 다시 번역하지 않고 예전에 번역된 결과값을 다시 쓰잖아요.... 궁금한건 이부분을 Aral본체가 하는것인지.... 아니면... 번역플러그인이 해주는 것인지이거든요.. 그러니까 번역플러그인을 만들려면.... 저 처리를 번역플...  
207 OtherFiles CustomDic 090106 쓰레드 에러 도와주세요~ [2] file Hide_D 14035   2009-01-06 2009-01-06 20:47
 
206 Archive 번역용 작업툴 v0.2.2 [2] file HaruKaze 11464   2009-01-06 2009-01-06 23:48
 
205 Archive SimpleDLL [2] file Hide_D 12021   2009-01-07 2009-01-07 15:55
 
204 Archive (수정) 하루카제님 요청하신 VB용번역dll입니다. [2] file 호기심맨 10250   2009-01-07 2009-01-08 00:54
 
203 Archive CustomDic 0.3 20080107 또 오류 OTL [5] file Hide_D 13954   2009-01-07 2009-01-08 02:00
 
202 Talk ezTransXP의 다이얼로그 파일의 h,cpp가 누락되어있습니다. [1] Hide_D 12415   2009-01-10 2009-01-12 21:37
커밋하시면서 빼놓으신것 같네요;; ezTransXP 쪽도 수정할게 좀 있어서 저부분 마저 올려주세요~  
201 Archive [플러그인,소스] Korean Duplication Checker 20090115 [2] file Hide_D 13334   2009-01-14 2009-01-19 23:34
 
200 Talk 코드정리 목록 + 코드 secret sizukana 6   2009-01-17 2009-01-17 11:41
비밀글입니다.  
199 Archive [번역툴]QuickTrans Beta 0.0.6 [6] file HaruKaze 21992   2009-01-28 2011-04-27 12:51
 
198 Archive TextFile Open/Save Library [5] file Hide_D 11830   2009-02-01 2009-02-09 00:37
 
197 Archive [번역툴]QuickTrans 0.0.10 RC4 [10] file HaruKaze 11899   2009-02-09 2009-03-07 20:49
 
196 Talk 버그 확인 목록 [4] Hide_D 12347   2009-03-06 2009-03-16 03:09
(확인) CustomDic - 옵션창에서 쓰레드를 중지하지 않았다. CustomScript - 파일이 없는 상태에서 바로가기에 Write 모드가 추가되었을때 에러 KiriKiri - 선택지 출현지 문자열 번역 오류 해결 (확인 필요) FixLine 문자가 아무도 없을때 튕김 -_-? 2Byte 잘 ...  
195 Archive [번역툴]QuickTrans 0.1.0 릴리즈 [1] file HaruKaze 17466   2009-03-08 2011-06-28 01:25
 
194 Talk FixLine 기능 추가 [1] Hide_D 11416   2009-03-13 2009-03-13 21:23
rn r 이런식으로 나올때 r이 우선 적용되는 문제를 해결할것 -가능한 방법- 1. Greedy, UnGreedy의 부분적 적용 2. 우선순위 선택 3. 정규식과 맞짱뜨기 4. 어정쩡한 조건문 (r)(n) 이면 둘중 하나 있거나, 둘다 있거나 하면 그렇게 지정되는걸로 - 류제로님의...  
193 Talk 번역 플러그인 난해한 문제???? [3] 호기 14864   2009-03-15 2009-10-20 18:06
지금 ML_Trans라는 번역 플러그인을 만들고 있는데 좀 이해가 안가는 문제가 생기네요.. 아랄에 적용시킨후 다른 번역 플러그인으로 바꿀때는 아무 문제가 안생깁니다 그러니까 번역 플러그인을 EzTransXp<->ML_Trans로 마구 여러번 바꾸어도 문제는 안일어 납...  
192 Talk 히데님이 부탁하신거.... [1] file 류제로 19458   2009-03-21 2011-06-28 01:25
 
191 Talk FixLine '인수 추가' 창 새 디자인 [4] file Hide_D 18340   2009-03-26 2009-03-27 02:07
 
190 Archive FixLine v2 20090329 테스트버전 [6] file Hide_D 14317   2009-03-29 2009-03-29 15:51