2013-02-27 102 views
34

Tôi có một câu hỏi nhỏ. Tôi biết rằng định dạng% x định dạng có thể được sử dụng để đọc các giá trị từ ngăn xếp trong một cuộc tấn công chuỗi định dạng.C - Định dạng% x định dạng

tôi thấy đoạn mã sau:

%08x%08x%08x%08x 

nào 08 có ý nghĩa gì? Nó làm gì chính xác? Cảm ơn :)

+1

Độ rộng trường 8 ký tự, các số ngắn hơn được bắt đầu bằng số 0 đứng đầu để khớp với chiều rộng của trường, ví dụ: '000007ac' hoặc' 0005ceef'. –

+1

Chức năng này nói về cái gì? Bạn nói "read values", nhưng tất cả các câu trả lời dường như giả sử 'printf()' đang được sử dụng. – unwind

+0

@unwind điểm tốt. tất cả chúng ta viết cho printf. –

Trả lời

82

Break-xuống:

  • 8 nói rằng bạn muốn hiển thị 8 chữ số
  • 0 mà bạn muốn thêm tiền tố với 0 's thay vì chỉ khoảng trống
  • x mà bạn muốn in trong hệ thập lục phân chữ thường.

dụ nhanh (nhờ Grijesh Chauhan):

#include <stdio.h> 
int main() { 
    int data = 29; 
    printf("%x\n", data); // just print data 
    printf("%0x\n", data); // just print data ('0' on its own has no effect) 
    printf("%8x\n", data); // print in 8 width and pad with blank spaces 
    printf("%08x\n", data); // print in 8 width and pad with 0's 

    return 0; 
} 

Output:

1d 
1d 
     1d 
0000001d 

Xem thêm http://www.cplusplus.com/reference/cstdio/printf/ để tham khảo.

+3

Đã thêm một ví dụ hy vọng bạn thích. NẾU bạn không thể quay trở lại phiên bản –

+0

Cảm ơn bạn rất nhiều :))) Đó chính xác là những gì tôi cần :) – Matthew

+0

@Matthew bạn cũng nên thử với '% -8x' và vốn' X'. và quan sát hiệu ứng –

2

Điều đó chỉ định số lượng chữ số bạn muốn hiển thị.

giá trị số nguyên hoặc * chỉ định chiều rộng trường tối thiểu. Kết quả được đệm với các ký tự khoảng trắng (theo mặc định), nếu được yêu cầu, ở bên trái khi được canh lề phải hoặc ở bên phải nếu được căn trái. Trong trường hợp khi * được sử dụng, chiều rộng được xác định bởi một đối số bổ sung của kiểu int. Nếu giá trị của đối số là số âm, nó kết quả với chiều rộng trường được chỉ định và dương.

2

%08x có nghĩa là mọi số phải được in ít nhất 8 ký tự bằng cách điền tất cả các chữ số bị thiếu bằng số 0, ví dụ: cho đầu ra '1' sẽ 00000001

1

Từ http://en.wikipedia.org/wiki/Printf_format_string

sử dụng 0 thay vì không gian để pad một lĩnh vực khi tùy chọn chiều rộng được chỉ định. Ví dụ: printf("%2d", 3) kết quả bằng "3", trong khi printf("%02d", 3) kết quả bằng "03".

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