2012-10-16 25 views
5

tôi muốn bao gồm giá trị của định dạng i hex trong c.cách bao gồm giá trị hex trong chuỗi sử dụng sprintf

for(i=0;i<10;i++) 
    sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 

nhưng mã trên kết quả đầu ra một lỗi: \ x sử dụng không có chữ số hex sau

Xin vui lòng bất kỳ một đề nghị tôi một cách thích hợp ....

Trả lời

1

Bạn cần phải thoát khỏi dấu gạch chéo trên phía trước của \x:

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
//    ^------- Here 

Tùy thuộc vào những gì đầu ra mà bạn muốn đạt được, bạn có thể cần phải thoát khỏi các dấu gạch chéo còn lại là tốt.

Hiện tại, đoạn mã tạo chuỗi sáu ký tự với mã 0xFF. Nếu đây là những gì bạn muốn, đoạn mã của bạn đã hoàn thành. Nếu bạn muốn nhìn thấy một chuỗi các \xFF literals, tức là một chuỗi trông giống như \x5\xFF\xFF\xFF\xFF\xFF\xFF khi i == 5, bạn cần phải thoát khỏi tất cả các dấu gạch chéo trong chuỗi:

sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i); 
//   ^^^^^^^

Cuối cùng, nếu bạn muốn giá trị được định dạng như một mã hex hai chữ số ngay cả khi giá trị nhỏ hơn 16, sử dụng mã định dạng %02x để cho biết sprintf mà bạn muốn có số 0 đứng đầu.

+0

Tôi nghĩ rằng anh ta muốn một cách khác: '\ xFF' nên mở rộng thành giá trị' 0xFF' trong khi sau 'DTLK' anh ta muốn có giá trị biến ... – glglgl

+0

@glglgl Thật khó để nói chắc chắn, nhưng đó là lý do duy nhất tại sao tôi nghĩ OP sẽ yêu cầu cụ thể cho một giá trị hex. – dasblinkenlight

+0

Một số người kết hợp các nhân vật với bản trình bày của họ; đó là lý do tại sao tôi nghĩ ngược lại. YMMV. – glglgl

0

\x dự kiến ​​giá trị hex như \xC9.

Nếu bạn muốn bao gồm \x ở đầu ra của bạn, bạn cần phải thoát khỏi \ với \\:

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
+0

Tôi nghĩ rằng anh ta muốn byte thứ 5 là 0..10 ... – glglgl

0

Giả sử bạn không muốn theo nghĩa đen có \x00 .. \x0A, nhưng byte tương ứng, bạn cần

sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i); 

khi chèn \x%x sẽ ở mức trừu tượng sai ...

Nếu, OTOH, bạn thực sự muốn theo nghĩa đen có các ký tự hex thay vì các byte có tên là cahracters hey như là biểu diễn của chúng, các câu trả lời khác có thể hữu ích hơn.

0
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
//    ^------- Here 

Tùy thuộc vào đầu ra bạn muốn đạt được, bạn có thể cần phải thoát khỏi các dấu gạch chéo còn lại.

Hiện tại, đoạn mã tạo chuỗi sáu ký tự với mã 0xFF. Nếu đây là những gì bạn muốn, đoạn mã của bạn đã hoàn thành. Nếu bạn muốn nhìn thấy một chuỗi các \xFF literals, tức là một chuỗi trông giống như \x5\xFF\xFF\xFF\xFF\xFF\xFF khi i == 5, bạn cần phải thoát khỏi tất cả các dấu gạch chéo trong chuỗi:

sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i); 

//   ^^^^^^^

Cuối cùng, nếu bạn muốn giá trị được định dạng như một mã hex hai chữ số ngay cả khi giá trị nhỏ hơn 16, sử dụng mã định dạng %02x để cho biết sprintf mà bạn muốn có số 0 đứng đầu.

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