2012-03-07 41 views
12

Tôi biết chúng tôi có thể sử dụng printf ("% 04X", giá trị); để in các giá trị hex chưa kýcách in hex đã ký trong c

có một cờ tương tự hoặc một hàm trong c mà bạn có thể sử dụng để in các giá trị hex đã ký không?

một cái gì đó tương tự như thế này

BINARY HEX(SIGNED) HEX (UNSIGNED) 
-------- ----------- -------------- 

00000010 +0x2  0x2 
00000001 +0x1  0x1 
00000000 +0x0  0x0 
11111111 -0x1  0xFF 
11111110 -0x2  0xFE 
11111101 -0x3  0xFD 

Trả lời

0

Ý anh là gì bởi một giá trị thập lục phân "ký"? Bạn có muốn một cái gì đó như "-e0"? Nếu vậy, điều đó có nghĩa là gì? Dấu hiệu đã được thể hiện trong màn hình thập lục phân, vì nó hiển thị tất cả các bit và đó là tất cả thông tin có trong số đó.

+1

Vâng, nó có thể được hiểu là giá trị trong hệ thập lục phân với dấu hiệu ở phía trước nó. Cho dù một người có thể muốn nó vì lý do hợp lệ là một vấn đề khác :) –

+0

xem chỉnh sửa của tôi ở trên – David

3

Không, nhưng bạn có thể làm điều gì đó như

printf("%c%04X",(x<0)?'-':' ',(x<0)?-x:x); 

Nhưng, như điểm khác ra, đó là nghi ngờ liệu có một lý do chính đáng để làm như vậy. Hãy chắc chắn để hiểu chính xác những gì nó là bạn đang yêu cầu.

EDIT: theo chỉnh sửa bài viết của bạn, bạn không hiểu những gì bạn đang yêu cầu cho, vì vậy tất cả là lỗi của bạn ;-)

+0

Nếu bạn không thích lỗi và sự xáo trộn, bạn có thể chỉ cần làm 'if (x <0) printf (" - ")' trước khi in con số. Bởi vì bạn có hai lỗi có thể có trong mã của bạn. – Lundin

+0

Lỗi có thể xảy ra đầu tiên: '(x <0)? '-': ''' chuyển int tới printf, không phải char như mong đợi. Điều này là do toán hạng thứ 2 và thứ 3 của toán tử?: Được cân bằng. Do đó, cả hai toán hạng đều phải chịu các chương trình khuyến mãi số nguyên ẩn. Điều này đặc biệt xấu trong C++, trong đó ký tự chữ là loại char, và không int như trong C. – Lundin

+0

Lỗi thứ hai có thể: '(x <0)? - x: x' Nếu x được ký, mã không làm cho cảm giác sử dụng toán tử đơn nhất - bởi vì x đã có định dạng mong muốn. Nếu x là unsigned, nó vẫn không có ý nghĩa để sử dụng unary -, vì kết quả là một loại unsigned. Và ngay cả khi bạn quản lý để có được toán hạng thứ hai của?: Cho một loại đã ký, nó vẫn sẽ được cân bằng trở lại một loại unsigned, vì toán hạng thứ 3. – Lundin

7

Thật không may printf chức năng C không có cách nào để làm điều này trực tiếp. Bạn có thể tất nhiên thay vì cố gắng:

printf("%s%x\n", x<0?"-":"", x<0?-(unsigned)x:x); 

Sửa: Tôi tin rằng tôi khắc phục sự cố xử lý INT_MIN ...

+1

wuahhh, bây giờ đó là một hack xấu xí ... Không có gì khác, thậm chí không trong C99? nếu không: Chết tiệt bạn, C. – Gewure

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