này:
printf("%x", array);
sẽ rất có thể in địa chỉ của phần tử đầu tiên của mảng của bạn trong hệ thập lục phân. Tôi nói "rất có thể" vì hành vi cố gắng in một địa chỉ như thể đó là một số unsigned int
là không xác định. Nếu bạn thực sự muốn in địa chỉ, đúng cách để làm điều đó sẽ là:
printf("%p", (void*)array);
(Một biểu thức mảng, trong hầu hết các tình huống, được ngầm chuyển đổi sang ("phân rã" để) một con trỏ đến mảng đầu tiên phần tử.)
Nếu bạn muốn in từng phần tử trong mảng của mình, bạn sẽ phải làm như vậy một cách rõ ràng. Định dạng "%s"
lấy con trỏ đến ký tự đầu tiên của chuỗi và yêu cầu printf
lặp qua chuỗi, in từng ký tự. Không có định dạng nào thực hiện loại điều đó trong hệ thập lục phân, vì vậy bạn sẽ phải tự làm điều đó.
Ví dụ, đưa ra:
unsigned char arr[8];
bạn có thể in nguyên tố 5 như thế này:
printf("0x%x", arr[5]);
hoặc, nếu bạn muốn có một hàng đầu zero:
printf("0x%02x", arr[5]);
Định dạng "%x"
yêu cầu đối số unsigned int
và giá trị unsigned char
bạn vượt qua ing được ẩn hoàn toàn được quảng bá đến unsigned int
, vì vậy đây là loại chính xác. Bạn có thể sử dụng "%x"
để in các chữ số thập phân a
qua f
trong chữ thường, "%X"
cho chữ hoa thường (bạn đã sử dụng cả hai trong ví dụ của mình).
(Lưu ý rằng định dạng "0x%02x"
hoạt động tốt nhất nếu byte 8 bit, đó là không bảo đảm, nhưng nó gần như chắc chắn các trường hợp trên bất kỳ hệ thống bạn đang có khả năng để sử dụng.)
Tôi sẽ để lại nó cho bạn để viết vòng lặp thích hợp và quyết định cách phân định đầu ra.
Nguồn
2012-04-29 21:15:21
Làm cho loại mảng của bạn 'unsigned char [] 'chứ không phải' char [] '. –
http://stackoverflow.com/questions/6357031/how-do-you-convert-buffer-byte-array-to-hex-string-in-c –