2010-02-26 47 views

Trả lời

10

Nếu nó là một vấn đề bài tập về nhà có lẽ họ muốn bạn để thực hiện strtol, bạn sẽ có một cái gì đó vòng lặp như thế này:

char* start = &binaryCharArray[0]; 
int total = 0; 
while (*start) 
{ 
total *= 2; 
if (*start++ == '1') total += 1; 
} 

Nếu bạn muốn nhận được ưa thích bạn có thể sử dụng các trong vòng lặp: "? trong C "

total <<= 1; 
    if (*start++ == '1') total^=1; 
+0

tìm thấy giải pháp thậm chí còn ưa thích hơn .. 'trong khi (len--) {ret = (ret << 1) | (* bits ++ & 1);} ' –

19

Các strtol chức năng trong thư viện chuẩn có một "cơ sở" tham số, mà trong trường hợp này sẽ là 2.

int fromBinary(const char *s) { 
    return (int) strtol(s, NULL, 2); 
} 

(mã C đầu tiên tôi đã viết trong khoảng 8 năm :-)

+2

@Pointy: Mã đẹp sau 8 năm: P :) – t0mm13b

+1

Trong C, không có sẵn chữ "null". Có một macro, NULL, do đó, nó cần phải được trên cased. Ngoài ra, đối số chuỗi phải được tạo thành "const", vì hàm sẽ không sửa đổi nó. – unwind

+0

ồ phải. Tôi, tôi có thể đã sử dụng "0" sau khi trình biên dịch nói với tôi về lỗi :-) – Pointy

0

Tôi đoán nó thực sự phụ thuộc vào một số câu hỏi về chuỗi/chương trình của bạn. Nếu, ví dụ, bạn biết số của bạn sẽ không lớn hơn 255 (IE bạn chỉ sử dụng 8 bit hoặc 8 0s/1s), bạn có thể tạo một hàm mà bạn đưa nó 8 bit từ chuỗi của bạn, duyệt qua nó và thêm đến một khoản tiền mà bạn quay trở lại mỗi khi bạn nhấn 1. IE nếu bạn nhấn bit cho 2^7 thêm 128 và bit tiếp theo bạn nhấn là 2^4 thêm 16.

Đây là ý tưởng nhanh và dơ bẩn của tôi. Tôi nghĩ nhiều hơn và Google cho ya trong khi ở trường. : D

0

Đối với phần 2 của câu hỏi, tức là" làm thế nào để chuyển đổi một int, như 5, thành một chuỗi" 101, hãy thử một cái gì đó như:

void 
ltostr(unsigned long x, char * s, size_t n) 
{ 
    assert(s); 
    assert(n > 0); 

    memset(s, 0, n); 
    int pos = n - 2; 

    while(x && (pos >= 0)) 
    { 
    s[ pos-- ] = (x & 0x1) ? '1' : '0'; // Check LSb of x 
    x >>= 1; 
    } 
} 
0

Bạn có thể sử dụng mã hóa sau

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main (void) 
{ 
    int nRC = 0; 
    int nCurVal = 1; 
    int sum = 0; 
    char inputArray[9]; 
    memset(inputArray,0,9); 
    scanf("%s", inputArray); 
    // now walk the array: 
    int nPos = strlen(inputArray)-1; 
    while(nPos >= 0) 
    { 
     if(inputArray[nPos] == '1') 
     { 
     sum += nCurVal; 
     } 
     --nPos; 
     nCurVal *= 2; 
    } 
    printf("%s converted to decimal is %d\n", inputArray, sum); 
    return nRC; 
} 
0

Sử dụng như thế này:

char c[20]; 
int s=23; 

itoa(s,c,2); 
puts(c); 

Output:

10111 
+0

Lưu ý:' itoa' là hàm C không chuẩn –

Các vấn đề liên quan