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 ?
Bài liên quan
Chậm là do
out
phải copy dữ liệu khi thay đổicapacity
- tối ưu hơn: resize out kích thước vừa đủ chứaDùng qua dữ liệu trung gian - tối ưu: lấy trực tiếp
Muốn nhanh tự code và dùng char* thay string
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 ?
xài stringstream. Đừng xài
out += ...
đừ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
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 !@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 ý !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
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 đó