dirty 13℃

今日無事.

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

数字串与对应的asc码值二进制串的相互转换函数

也就是"0123" 与 "00110000 00110001 00110002 00110003 " 相互转换

------------------------------------------------------------>8---

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void encode(const char *src, char *dest)
{
    char ch;
    int i,x;

    while(ch=(*src++))
    {
        for (i=0; i<8; i++)
        {
            x = (ch >> (7-i)) & 1;
            *dest++ = x + '0';
        }
    }
    *dest = '\0';
}

void decode(const char *src, char *dest)
{
    char ch;
    int index,i,x;
    int bytes;

    if(strlen(src)%8!=0)
        exit(1);

    bytes = strlen(src) / 8;

    for(index = 0; index < bytes; index++)
    {
        for(x = 0, i=0; i <8; i++)
        {
            ch = src[index*8+i];
            x |= (ch & 1) << (7-i);
        }
        *dest++ = x;
    }
    *dest = '\0';
}


int main(void)
{
    char s[]="0011000000110010001100010011000000110000";
    char s2[100];

    decode(s,s2);
    printf("%s > %s\n", s, s2);

    encode(s2,s);
    printf("%s > %s\n", s2, s);

    return 0;
}

------------------------------------------------------------>8---

运行结果:

0011000000110010001100010011000000110000 > 02100
02100 > 0011000000110010001100010011000000110000 

posted on 2009-05-03 12:52  xbride  阅读(358)  评论(0)    收藏  举报