30/09/2018, 19:59

Chuyển tất cả các ký tự có trong một string (C++) thành dạng binary (1 char = 8 bit) NHANH NHẤT có thể?

Xin chào các thành viên diễn đàn DAYNHAUHOC!

Các bạn có cách nào để chuyển đổi tất cả các ký tự có trong một string về thành dạng binary 8 bit (một ký tự là 8bit) nhanh nhất không ? Ngoài cách dùng vòng lặp ra ấy ?

Dưới đây là cách mình dùng vòng lặp để chuyển đổi !
void main()
{
std::string str ="abcd",out;

for(int i=0;i<str.size();i++){
    std::bitset<8>binary(str[i]);//chuyển 1 ký tự thành 8 bít.
    out+=binary.to_string();//lưu vào output.
}
std::cout<<out<<std::endl;
}

Thật ra nếu xử lý dữ liệu nhỏ vd:str.size()=4 thì dùng cách trên cũng đươc , nhưng do dữ liệu mình xử lý là dữ liệu lớn vd:str.size()=4396680 dùng cách trên chậm quá ! Các bạn có cách nào hay chỉ mình với ?

Gió viết 22:01 ngày 30/09/2018

Chậm là do out phải copy dữ liệu khi thay đổi capacity - tối ưu hơn: resize out kích thước vừa đủ chứa
Dùng qua dữ liệu trung gian - tối ưu: lấy trực tiếp

Khôi Trần viết 22:14 ngày 30/09/2018

Muốn nhanh tự code và dùng char* thay string

dragon viết 22:12 ngày 30/09/2018

Tự code là sao bạn ? char * và string nó cũng như nhau thôi mà ! T đã áp dụng multi-thread vào cho nó xử lý rồi thời gian giảm đc phân nữa ! Nhưng t ý t muốn tham khảo các bạn có cách nào khác mà hay hơn t viết không ! Mấy bạn trả lời chung chung quá … có thể cụ thể hóa bằng 1 vài đoạn mã giả hay gì đó không ?

viết 22:07 ngày 30/09/2018

xài stringstream. Đừng xài out += ...

std::string str ="abcd";
std::ostringstream oss;

for(int i=0;i<str.size();i++){
    std::bitset<8>binary(str[i]);//chuyển 1 ký tự thành 8 bít.
    oss << binary.to_string();//lưu vào output.
}
std::cout << oss.str() << std::endl;
Khôi Trần viết 22:14 ngày 30/09/2018

đừng bao giời nói string với char* như nhau nhá, 1 trời 1 vực đấy, tự code là code không dùng mấy hàm có sẵn

dragon viết 22:03 ngày 30/09/2018

Cảm ơn bạn tntxtnt Trần Ngọc Trí … nhờ có bạn gợi ý mà mình tìm được cách mới hay hơn nhờ xài stringstream sẳn chia sẽ với các bạn !

void main(){
        typedef std::bitset<CHAR_BIT> byte_type;

	std::ostringstream stream;
	std::string fred("hellossdadadadadadadassdadas");

	std::copy(fred.begin(),
		fred.end(),
		std::ostream_iterator<byte_type>(stream, " "));

	std::cout << stream.str() << std::endl;
}

@JuniorK Nguyên project của t code chai nó đã quá dài ! Nếu tự viết thêm không sử dụng hàm hổ trợ của thư viện std::string chắc t chết luôn quán T biết khi tôi nói thế nào cũng bị bắt bẽ mà thôi dù gì t cũng là người code không chuyên nghiệp ! Cảm ơn bạn góp ý !

Khôi Trần viết 22:11 ngày 30/09/2018

code của bạn là 4 dòng dùng char[] và tự code không quá 10 dòng đâu nhanh thì gấp nhiều lần đấy

yoyo viết 22:11 ngày 30/09/2018

Sao bạn không dùng phương thức c_str() để chuyển sang mảng ký tự rồi dùng memcpy copy nó sang mảng char nào đó

Bài liên quan
0