꽤 오래전 일인데.. Rotate 를 써야 하는 경우가 있었습니다.
제가 작업할 때 주로 사용하는 언어는 C/C++ 인데...
C/C++ 에서는 Shift 연산자는 있지만~ Rotate 에 대한 내용은 없더라구요.
그래서 그 때~ 가볍게 작성한 Rotate 함수입니다~ㅋ
#define LEFT 0 #define RIGHT 1 void Rotate(unsigned char &src, int mode) { if (mode == RIGHT) { unsigned char temp; temp = src; temp <<= 7; src >>= 1; src |= temp; } if (mode == LEFT) { unsigned char temp; temp = src; temp >>= 7; src <<= 1; src |= temp; } }
한바이트에 대해서 Rotate 를 하게 되는데 mode 에~ LEFT, RIGHT 를 써서
방향을 지정해줄 수도 있습니다.
이글루스에 있던 자료를 백업차원에서 티스토리에도 올려봅니다~ㅋ
'Programming' 카테고리의 다른 글
[C/C++] 인라인 어셈블리 "FS:[0]" 관련 팁~! (5) | 2008.11.03 |
---|---|
[C/C++] 투명창 만들기~ ( SetLayeredWindowAttributes 사용 ) (3) | 2008.08.01 |
[C/C++] Rotate ~ 구현 (5) | 2008.07.19 |
[VB] Visual Basic 에서 C/C++ 로 만든 DLL 불러쓰기... (4) | 2007.12.14 |
[C/C++] 공유 섹션 사용하기~~ (2) | 2007.08.18 |
[C/C++] 현재 실행중인 프로세스의 실행파일명 구하기... (2) | 2007.08.08 |
ㅋㅋㅋ 왠지 전 ASM이 더 친숙하더라구요 :-)
__asm
{
ROL DWORD PTR DS:[ESI], EAX
}
oTL;;;(털썩;;..)...
저땐.. 왜 그 생각을 못했을까요.. =0=;;
뭐.. VC에 _rotl, _rotr, _lrotl, _lrotr 이라는 함수가 있던걸로 기억합니다.
헉;;;.. =0= 그런 함수들이 있었군요;;
오늘 첨 알았습니다... 털석;; (oTL;; )
#define LEFT 0
#define RIGHT 1
__declspec(naked) unsigned char __fastcall rotate(unsigned char value, int dir)
{
__asm {
mov al, cl
cmp edx, RIGHT
jz _ROTATE_RIGHT
rol al , 1
retn
_ROTATE_RIGHT:
ror al, 1
retn
}
}
저도 asm이..ㅋㅋ