본문 바로가기

쓰기

 // 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/d9c/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 [필독] 테스트필터 사용시 주의사항 라파에 155437   2008-08-03 2008-12-16 00:03
229 Talk 아아아아앍 cmd /u !!!!!!!!!!!!!!!!!! [1] Hide_D 12323   2008-12-22 2009-01-06 00:47
cmd /? 해서 살펴보고 있는데 /u 플래그가 있었군요 /U 파이프 또는 파일로의 내부 명령어의 출력을 Unicode로 설정합니다. dir /s /b > UniDir.txt 로 했더니 UTF16-LE BOM없음으로 저장되는군요. 옴마야. 왜 모르고있었지  
228 Archive [플러그인,소스] FixLine RC2 081223 [4] file Hide_D 17424   2008-12-23 2008-12-30 08:50
 
227 Talk 기리기리 [] 함수 내부 처리 [1] Hide_D 12463   2008-12-23 2008-12-30 08:49
이것이 , 나의[荷物'ざいさん]의 모두였다. [ ' ] 로 나오는 경우 추가로 루비로 처리되는 모양입니다 이거 추가해둬야겠네요.  
226 Talk 쓰레드를 사용하려고 하는데 제대로 안되네요; [2] Hide_D 10808   2008-12-25 2008-12-26 22:53
음 일단 쓰레드를 사용하는 파일은 CAutoLoad 클래스 하나뿐이구요. CustomDic에 포함됩니다. 5초마다 한번씩 파일리스트에 등록된 파일의 수정된 날짜를 체크해서 새로 갱신된것이면 새로 읽는다...라는 기능을 가지고 있는데, 애초부터 쓰레드가 동작조차 하...  
225 Talk FixLine 23일자 파일은 무시설정에 문제가 있는듯하네요 [7] 류제로 15841   2008-12-26 2008-12-30 08:30
이번에 올라온 종말능의를 코드를 입력시켜면서 알게된 것인데 23일자 FixLine 옵션의 무시설정의 서클체크을 사용안함 이외 부분을 체크하고 확인을 누르면 적용은 되는듯하나 다시 옵션창을 열어보면 체크가 사용 안함으로 표시 되어있습니다 20일자로 실행...  
224 Talk 필터에 MFC로 모달리스 창을 띄웠을때=ㅅ=; [4] file Hide_D 13934   2008-12-27 2008-12-30 08:29
 
223 Talk Fixline용 텍스트 파일.... [3] file 처음처럼만 11753   2008-12-29 2008-12-30 09:02
 
222 Talk 히데님이 말씀하신 테스트파일 [2] file 유르_리샤 11530   2008-12-29 2008-12-30 08:25
 
221 Talk 음 제가 컴퓨터를 못하는 사람이라 뻘글일 수도 있겠지만.. [2] 쥬빌 14389   2008-12-30 2008-12-30 12:14
아랄 트랜스의 장점이 게임상의 대사가 바로 한글로 변환 표기되는 것이라 보는데요. 번역률을 높이기 위해 번역본이 있는 게임들은 ez트랜스가 아닌, 미연시 번역본 text과 연동하여 쓸수는 없을까요? ez와의 연동 구조를 잘 모르겠으나..게임상의 일어를 ez...  
220 Archive [플러그인] FixLine 테스트버전 081230 [4] file Hide_D 13238   2008-12-30 2008-12-31 00:39
 
219 Archive [플러그인] FixLine 테스트버전 081231_2 [1] file Hide_D 10702   2008-12-31 2008-12-31 21:48
 
218 Archive [플러그인,소스] DumpText2 테스트버전 081231 [1] file Hide_D 11059   2008-12-31 2008-12-31 21:59
 
217 Talk 디나이코필터 [2] my vagina 10993   2008-12-31 2009-01-15 00:10
코필터는 대단히 훌륭한 필터죠 근데 전부 한자로 되있으믄 간간히 해석 안되는 부분이 생기기도 하는데 어쩔수 없는 부분이 보이거든요. 이런걸 수동으로 억제 해보자는 생각이에요. 아마 코필터 내부에 들어가야 할텐데, 코필터에 디나이필터를 넣어서 일본...  
216 Archive 후킹방식 바꾼 ATCTNR.DLL [5] file 아랄 11319   2008-12-31 2009-01-06 00:46
 
215 Archive 아야카시 실행파일 수정 [5] file 아랄 13873   2009-01-02 2009-03-24 11:42
 
214 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(...  
213 Talk [질문] CustomDic필터와 FixLine의 셋팅순서 [4] 호기심맨 11404   2009-01-03 2009-01-04 14:58
멀티플러그인 필터를 만들려고 하면서 제일 의문이 드는 부분인데요 그 필터들의 실행순서가 어떻게 결정되는지가 무척 궁금하네요 그러니까 예를 들어 A,B,C 3개의 필터를 순서대로 셋팅했다고 가정하면 제가 파악하기로는 알고리즘 코드 ↓ AFilter.OnPreTran...  
212 Talk CustomDic의 치환문자열에 대해 ( Hide님께) [2] 호기심맨 11323   2009-01-03 2009-01-05 00:04
안녕하세요 Hide님..저도 전부터 CustomDic유사한걸 만드드라 알아내고 여러번 Test해봐서 얻어낸 결론인데요.. 지금 Hide님이 정의하신 치환문자열"@*_D..../"보다는 역시 실제 쓰일리없는 엉망진창인 알파벳문자열이 훨씬 더 변역결과가 좋더군요. (주로 한...  
211 Talk 비주얼베이직에서의 Hash값 생성 코드 작업 file HaruKaze 9022   2009-01-05 2009-02-14 11:04
 
» 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)...