2009년 1월 14일 수요일

C 에서 한바이트를 비트단위로 찍어보기

한동안 자주 쓸것같은 함수네.
여기 적어둔다.
버퍼포인터 주고받기 구찮아서 그냥 2진수 모양의 10진수를 리턴하도록 했다.


#include <stdint.h>
#include <stdio.h>

/* 어쩌다 보니 비트값까지 찍어야 할 판이네. 그냥 간단히 찍기 위해서
* 스트링버퍼에 담아주는 방식이 아니고 0 하고 1 로 이루어진 십진수로
* 리턴을 받아서 이걸 %08d 등으로 찍을수 있게 했다. */

int foo(uint8_t b)
{
int i,r = 0;
int base = 1;
for(i = 0; i < 8; ++i)
{
r += base * ((b>>i) & 0x01);
base *= 10;
}
return r;
}


int main()
{
int i;
for(i = 0; i < 256; ++i)
printf("%3d: %08d 0x%02x\n",
i,
foo(i), /* %08d 로 찍자 */
i);

/* 4bit 단위로 끊어봤어 */
for(i=0; i<256; ++i)
printf("%3d: %04d %04d\n",
i,
foo(i)/10000,
foo(i)%10000);
}









댓글 없음: