Tôi đã mở rộng câu trả lời hay được đưa ra bởi @ renato-đèn chùm bằng cách đảm bảo sự hỗ trợ của:
_NIBBLE_(…)
- 4 bit, 1 nibble làm đối số
_BYTE_(…)
- 8 bit, 2 nibble làm đối số
_SLAB_(…)
- 12 bit, 3 nibble làm đối số
_WORD_(…)
- 16 bit, 4 nibble làm đối số
_QUINTIBBLE_(…)
- 20 bit, 5 nibble làm đối số
_DSLAB_(…)
- 24 bit, 6 nibble làm đối số
_SEPTIBBLE_(…)
- 28 bit, 7 nibble làm đối số
_DWORD_(…)
- 32 bit, 8 nibble làm đối số
Tôi thực sự không chắc lắm về các điều khoản của Quintibble và và septibble. Nếu bất cứ ai biết bất kỳ thay thế xin vui lòng cho tôi biết.
Đây là macro viết lại:
#define __CAT__(A, B) A##B
#define _CAT_(A, B) __CAT__(A, B)
#define __HEX_0000 0
#define __HEX_0001 1
#define __HEX_0010 2
#define __HEX_0011 3
#define __HEX_0100 4
#define __HEX_0101 5
#define __HEX_0110 6
#define __HEX_0111 7
#define __HEX_1000 8
#define __HEX_1001 9
#define __HEX_1010 a
#define __HEX_1011 b
#define __HEX_1100 c
#define __HEX_1101 d
#define __HEX_1110 e
#define __HEX_1111 f
#define _NIBBLE_(N1) _CAT_(0x, _CAT_(__HEX_, N1))
#define _BYTE_(N1, N2) _CAT_(_NIBBLE_(N1), _CAT_(__HEX_, N2))
#define _SLAB_(N1, N2, N3) _CAT_(_BYTE_(N1, N2), _CAT_(__HEX_, N3))
#define _WORD_(N1, N2, N3, N4) _CAT_(_SLAB_(N1, N2, N3), _CAT_(__HEX_, N4))
#define _QUINTIBBLE_(N1, N2, N3, N4, N5) _CAT_(_WORD_(N1, N2, N3, N4), _CAT_(__HEX_, N5))
#define _DSLAB_(N1, N2, N3, N4, N5, N6) _CAT_(_QUINTIBBLE_(N1, N2, N3, N4, N5), _CAT_(__HEX_, N6))
#define _SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7) _CAT_(_DSLAB_(N1, N2, N3, N4, N5, N6), _CAT_(__HEX_, N7))
#define _DWORD_(N1, N2, N3, N4, N5, N6, N7, N8) _CAT_(_SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7), _CAT_(__HEX_, N8))
Và đây là ví dụ sử dụng của Renato:
char b = _BYTE_(0100, 0001); /* equivalent to b = 65; or b = 'A'; or b = 0x41; */
unsigned int w = _WORD_(1101, 1111, 0100, 0011); /* equivalent to w = 57155; or w = 0xdf43; */
unsigned long int dw = _DWORD_(1101, 1111, 0100, 0011, 1111, 1101, 0010, 1000); /* Equivalent to dw = 3745774888; or dw = 0xdf43fd28; */
00010000
là bát phân, phải không? (Và tuyên bố của bạn thiếu một loại.)