标准数据类型
了解 32 位 UNIX, 64 位 UNIX和 64 位 Windows 应用程序上的标准数据类型。
32 位 UNIX 应用程序
包含此部分以进行比较,并基于 Solaris。 注意与其他 UNIX 平台 的任何差异:
| 名称 | 长度 |
|---|---|
| 字符型 | 1 个字节 |
| 短整型 | 2 字节 |
| int | 4 字节 |
| long | 4 字节 |
| 浮点值 | 4 字节 |
| 双精度值 | 8 字节 |
| long double | 16 字节 请注意,在 AIX® 和 Linux® PPC 上,长双精度值为 8 字节。 |
| 指针 | 4 字节 |
| ptrdiff_t | 4 字节 |
| 大小 | 4 字节 |
| 时间 (t) | 4 字节 |
| 发条 | 4 字节 |
| wchar_t | 4 字节 请注意,在 AIX 上, wchar_t 为 2 字节。 |
64 位 UNIX 应用程序
此部分基于 Solaris。 注意与其他 UNIX 平台 的任何差异:
| 名称 | 长度 |
|---|---|
| 字符型 | 1 个字节 |
| 短整型 | 2 字节 |
| int | 4 字节 |
| long | 8 字节 |
| 浮点值 | 4 字节 |
| 双精度值 | 8 字节 |
| long double | 16 字节 请注意,在 AIX 和 Linux PPC 上,长双精度值为 8 字节。 |
| 指针 | 8 字节 |
| ptrdiff_t | 8 字节 |
| 大小 | 8 字节 |
| 时间 (t) | 8 字节 |
| 发条 | 8 字节 请注意,在其他 UNIX 平台 上,时钟为 4 字节。 |
| wchar_t | 4 字节 请注意,在 AIX 上, wchar_t 为 2 字节。 |
Windows 64 位应用程序
| 名称 | 长度 |
|---|---|
| 字符型 | 1 个字节 |
| 短整型 | 2 字节 |
| int | 4 字节 |
| long | 4 字节 |
| 浮点值 | 4 字节 |
| 双精度值 | 8 字节 |
| long double | 8 字节 |
| 指针 | 8 字节 请注意,所有指针都是 8 字节。 |
| ptrdiff_t | 8 字节 |
| 大小 | 8 字节 |
| 时间 (t) | 8 字节 |
| 发条 | 4 字节 |
| wchar_t | 2 字节 |
| WORD | 2 字节 |
| DWORD | 4 字节 |
| 句柄 | 8 字节 |
| HFILE | 4 字节 |
Windows 上的编码注意事项
- HANDLE hf;
- 适用平台
请勿使用hf = CreateFile((LPCTSTR) FileName, Access, ShareMode, xihSecAttsNTRestrict, Create, AttrAndFlags, NULL);
因为这会产生错误。HFILE hf; hf = (HFILE) CreateFile((LPCTSTR) FileName, Access, ShareMode, xihSecAttsNTRestrict, Create, AttrAndFlags, NULL); - size_t len fgets
- 适用平台
请勿使用size_t len while (fgets(string1, (int) len, fp) != NULL) len = strlen(buffer);int len; while (fgets(string1, len, fp) != NULL) len = strlen(buffer); - printf
- 适用平台
请勿使用printf("My struc pointer: %p", pMyStruc);
如果需要十六进制输出,那么必须分别打印 4 字节的上限和下限。printf("My struc pointer: %x", pMyStruc); - char * 指针
- 适用平台
请勿使用char * ptr1; char * ptr2; size_t bufLen; bufLen = ptr2 - ptr1;char *ptr1; char *ptr2; UINT32 bufLen; bufLen = ptr2 - ptr1; - alignBytes
- 适用平台
请勿使用alignBytes = (unsigned short) ((size_t) address % 16);void *address; unsigned short alignBytes; alignBytes = (unsigned short) ((UINT32) address % 16); - len
- 适用平台
请勿使用len = (UINT32) ((char *) address2 - (char *) address1);void *address1; void *address2; UINT32 len; len = (UINT32) ((char *) address2 - (char *) address1); - sscanf
- 适用平台
请勿使用MQLONG SBCSprt; sscanf(line, "%d", &SBCSprt);MQLONG SBCSprt; sscanf(line, "%1d", &SBCSprt);%ld尝试将 8 字节类型放入 4 字节类型中; 仅当您处理的是实际long数据类型时才使用%l。 MQLONG , UINT32 和 INT32 定义为四个字节,与所有 IBM® MQ 平台上的int相同: