2008-09-22 40 views
18

Tôi đang cố gắng chuyển đổi số lần gửi 1s và 0 từ stdin thành giá trị nhị phân tương ứng của chúng (trong đó chuỗi như "11110111" sẽ được chuyển thành 0xF7). Điều này có vẻ khá tầm thường nhưng tôi không muốn phát minh lại bánh xe vì vậy tôi tự hỏi nếu có bất cứ điều gì trong C/C + + tiêu chuẩn libs mà có thể đã thực hiện một hoạt động như vậy?Chuyển đổi chuỗi 1 và 0 thành giá trị nhị phân

+0

Không phải bài tập về nhà. Tôi đang cố gắng để nhúng một công cụ chuyển đổi để dễ dàng đọc vào một bộ công cụ gỡ lỗi nhưng tất cả các đầu vào của chúng tôi là thông qua trong định dạng chuỗi. – grosauro

Trả lời

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

int main(void) { 
    char * ptr; 
    long parsed = strtol("11110111", & ptr, 2); 
    printf("%lX\n", parsed); 
    return EXIT_SUCCESS; 
} 

Đối với số lượng lớn, có như một phiên bản long long, strtoll.

+0

Điều này có vẻ đúng. Mối quan tâm duy nhất của tôi là những sợi dây rất lớn, suy nghĩ về nó bây giờ, có thể sẽ cần một số mã tùy chỉnh. – grosauro

+0

Bên cạnh đó strtol cũng đang đi dạo (hai L) cho các số nguyên "dài". – jkramer

+0

Ah, bây giờ tôi thấy quan điểm của bạn. Độ dài chuỗi không được là vấn đề miễn là số kết quả khớp với số nguyên dài hoặc dài. – jkramer

9

Bạn có thể sử dụng strtol

char string[] = "1101110100110100100000"; 
char * end; 
long int value = strtol (string,&end,2); 
14

Bạn có thể sử dụng std :: bitset (nếu chiều dài bit của bạn được biết tại thời gian biên dịch)
Mặc dù với một số chương trình bạn có thể chia nhỏ thành khối và kết hợp.

#include <bitset> 
#include <iostream> 

int main() 
{ 
    std::bitset<5> x(std::string("01011")); 

    std::cout << x << ":" << x.to_ulong() << std::endl; 
} 
6

Bạn có thể sử dụng Boost động BitSet:

boost::dynamic_bitset<> x(std::string("01011")); 
std::cout << x << ":" << x.to_ulong() << std::endl; 
1

Tôi đã viết một vài chức năng cho điều này và cấp phép theo LGPL. Có thể được tìm thấy here.

+0

Tôi đã xem mã nguồn của bạn, công việc thực sự tuyệt vời! Tôi cũng sao chép các chức năng hoạt động bit + đã viết vào giấy để tìm ra logic: D Tôi sẽ sử dụng chúng. – TuukkaX

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