2011-12-27 162 views
1

我需要帮助编写一个将完整句子转换为二进制代码(ascii - > decimal - > binary)的程序,反之亦然,但我无法做到这一点。现在我正在使用ascii-> binary。将ascii字符十进制值的字符串转换为二进制值

ascii字符有十进制值。 a = 97b = 98,等我想获得一个ASCII字符的十进制值,并将其二进制转换成dinary或二进制小数,如10(十进制)很简单:

10 (decimal) == 1010 (binary) 

所以ASCII十进制值a和b是:

97, 98 

这在二进制是(加上空格字符是32,感谢):

11000011000001100010 == "a b" 

11000011100010 == "ab" 

我已经写此:

int c_to_b(char c) 
{ 
    return (printf("%d", (c ^= 64 ^= 32 ^= 16 ^= 8 ^= 4 ^= 2 ^= 1 ^= 0)); 
} 

int s_to_b(char *s) 
{ 
    long bin_buf = 0; 

    for (int i = 0; s[i] != '\0'; i++) 
    { 
     bin_buf += s[i] ^= 64 ^= 32 ^= 16 ^= 8 ^= 4 ^= 2 ^= 1 ^= 0; 
    } 

    return printf("%d", bin_buf); 
} 

代码示例

的main.c

int main(void) 
{ 
    // this should print out each binary value for each character in this string 
    // eg: h = 104, e = 101 
    // print decimal to binary 104 and 101 which would be equivalent to: 
    // 11010001100101 
    // s_to_b returns printf so it should print automatically 
    s_to_b("hello, world!"); 
    return 0; 
} 

为了详细描述,在for环路在所述第二片段遍历字符阵列中的每个字符,直至碰到空终止符。每次它计算一个角色时,它都会执行该操作。我正在使用正确的操作吗?

+0

什么是“完整的句子转换成二进制代码”是什么意思? – 2011-12-27 06:05:38

+7

您可能需要将其缩小到更具体的范围。一般来说“不行,为我做”不是很有成效。 – 2011-12-27 06:06:26

+0

为什么你编码'c^= 64'这意味着'c = c^64'?我不明白,如果它是功课,你的要求是什么? – 2011-12-27 06:10:59

回答

2

也许你想要的东西,像

void s_to_b(const char*s) 
{ 
    if (s != NULL) { 
    while (*s) { 
     int c = *s; 
     printf(" %d", c); 
     s++; 
    } 
    putc('\n'); 
    } 
} 
+0

是的完全是这样的,但我相信它打印出十进制字符(它打印值超过1,如9)。有没有办法让字符打印出二进制而不是十进制? – evolon696 2011-12-27 06:48:34

+1

编写一个函数'print_in_binary'并用'print_in_binary(c)替换printf';' – 2011-12-27 06:57:24

+0

这里是我想到的: int print_in_binary(char c) int q = c; ((q/2)!= 0)q =(c/2); } printf(“%d”,q); } – evolon696 2011-12-27 07:08:45

相关问题