본문 바로가기

쓰기

 // 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/3cb/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
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 155436   2008-08-03 2008-12-16 00:03
229 Archive [플러그인,소스] Korean Duplication Checker 20090115 [2] file Hide_D 13333   2009-01-14 2009-01-19 23:34
 
228 Talk ezTransXP의 다이얼로그 파일의 h,cpp가 누락되어있습니다. [1] Hide_D 12415   2009-01-10 2009-01-12 21:37
커밋하시면서 빼놓으신것 같네요;; ezTransXP 쪽도 수정할게 좀 있어서 저부분 마저 올려주세요~  
227 Archive CustomDic 0.3 20080107 또 오류 OTL [5] file Hide_D 13954   2009-01-07 2009-01-08 02:00
 
226 Archive (수정) 하루카제님 요청하신 VB용번역dll입니다. [2] file 호기심맨 10250   2009-01-07 2009-01-08 00:54
 
225 Archive SimpleDLL [2] file Hide_D 12021   2009-01-07 2009-01-07 15:55
 
224 Archive 번역용 작업툴 v0.2.2 [2] file HaruKaze 11463   2009-01-06 2009-01-06 23:48
 
223 OtherFiles CustomDic 090106 쓰레드 에러 도와주세요~ [2] file Hide_D 14035   2009-01-06 2009-01-06 20:47
 
222 Talk [질문] 번역플러그인에 관해... [2] 호기심맨 12729   2009-01-06 2009-01-06 09:12
Aral을 하다보면 한번 번역된 문장은 다시 번역하지 않고 예전에 번역된 결과값을 다시 쓰잖아요.... 궁금한건 이부분을 Aral본체가 하는것인지.... 아니면... 번역플러그인이 해주는 것인지이거든요.. 그러니까 번역플러그인을 만들려면.... 저 처리를 번역플...  
221 Talk VB용 커스텀스크립트 Hash 함수 [2] HaruKaze 9835   2009-01-05 2009-02-14 11:01
비주얼베이직에서 사용할 수 있는 커스텀스크립트 Hash 생성 함수입니다. 비주얼베이직에서는 이진 변환과 이진 연산을 할 수 없기 때문에 이진 변환과 연산을 할 수 있게 해주는 함수를 작성하여 만들었습니다. - 정수를 이진 문자열로 변환하는 함수 - 이진...  
» Talk 하루카제님 요청하신거 C++로 만들어봤습니다. [3] Hide_D 10779   2009-01-05 2009-01-05 18:30
// 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)...  
219 Talk 비주얼베이직에서의 Hash값 생성 코드 작업 file HaruKaze 9021   2009-01-05 2009-02-14 11:04
 
218 Talk CustomDic의 치환문자열에 대해 ( Hide님께) [2] 호기심맨 11323   2009-01-03 2009-01-05 00:04
안녕하세요 Hide님..저도 전부터 CustomDic유사한걸 만드드라 알아내고 여러번 Test해봐서 얻어낸 결론인데요.. 지금 Hide님이 정의하신 치환문자열"@*_D..../"보다는 역시 실제 쓰일리없는 엉망진창인 알파벳문자열이 훨씬 더 변역결과가 좋더군요. (주로 한...  
217 Talk [질문] CustomDic필터와 FixLine의 셋팅순서 [4] 호기심맨 11404   2009-01-03 2009-01-04 14:58
멀티플러그인 필터를 만들려고 하면서 제일 의문이 드는 부분인데요 그 필터들의 실행순서가 어떻게 결정되는지가 무척 궁금하네요 그러니까 예를 들어 A,B,C 3개의 필터를 순서대로 셋팅했다고 가정하면 제가 파악하기로는 알고리즘 코드 ↓ AFilter.OnPreTran...  
216 Talk 관리자님께 '옵션코드 입력'에 관해서 요청~ Hide_D 9990   2009-01-03 2009-01-03 11:02
일반적으로 아랄트랜스에서 '옵션'을 긁어 온다면 두가지 방법으로 긁어올수 있습니다. /a:ATCode{HOOK(0x004016B0,TRANS([ESP+0x8],PTRCHEAT))} /f:DumpText{SET(10100)} /t:ezTransXP{} 이 형식과 HOOK(0x004016B0,TRANS([ESP+0x8],PTRCHEAT)) DumpText{SET(...  
215 Archive 아야카시 실행파일 수정 [5] file 아랄 13873   2009-01-02 2009-03-24 11:42
 
214 Archive 후킹방식 바꾼 ATCTNR.DLL [5] file 아랄 11318   2008-12-31 2009-01-06 00:46
 
213 Talk 디나이코필터 [2] my vagina 10993   2008-12-31 2009-01-15 00:10
코필터는 대단히 훌륭한 필터죠 근데 전부 한자로 되있으믄 간간히 해석 안되는 부분이 생기기도 하는데 어쩔수 없는 부분이 보이거든요. 이런걸 수동으로 억제 해보자는 생각이에요. 아마 코필터 내부에 들어가야 할텐데, 코필터에 디나이필터를 넣어서 일본...  
212 Archive [플러그인,소스] DumpText2 테스트버전 081231 [1] file Hide_D 11059   2008-12-31 2008-12-31 21:59
 
211 Archive [플러그인] FixLine 테스트버전 081231_2 [1] file Hide_D 10701   2008-12-31 2008-12-31 21:48
 
210 Archive [플러그인] FixLine 테스트버전 081230 [4] file Hide_D 13238   2008-12-30 2008-12-31 00:39