69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void TellMem(void * pData, int size)
{
unsigned char * pBuf;
pBuf = (unsigned char *)pData;
while (size--)
{
printf("%02X ", *pBuf);
pBuf++;
}
printf("\n");
}
int main(void)
{
signed char s8;
unsigned char u8;
signed short s16;
unsigned short u16;
signed int s32;
unsigned int u32;
/* size 相同时, 内部存储值不变 */
s8 = -1;
s16 = -1;
s32 = -1;
u8 = s8;
u16 = s16;
u32 = s32;
TellMem(&s8, sizeof(s8)); // FF
TellMem(&u8, sizeof(u8)); // FF
TellMem(&s16, sizeof(s16)); // FF FF
TellMem(&u16, sizeof(u16)); // FF FF
TellMem(&s32, sizeof(s32)); // FF FF FF FF
TellMem(&u32, sizeof(u32)); // FF FF FF FF
s8 = 1;
s16 = 1;
s32 = 1;
u8 = s8;
u16 = s16;
u32 = s32;
TellMem(&s8, sizeof(s8)); // 01
TellMem(&u8, sizeof(u8)); // 01
TellMem(&s16, sizeof(s16)); // 01 00
TellMem(&u16, sizeof(u16)); // 01 00
TellMem(&s32, sizeof(s32)); // 01 00 00 00
TellMem(&u32, sizeof(u32)); // 01 00 00 00
/* 大size转成小size, 内部存储值截取小size部分,高位部分舍弃 */
s32 = 0x12345678;
s16 = s32;
u16 = s32;
s8 = s16;
u8 = s16;
TellMem(&s32, sizeof(s32)); // 78 56 34 12
TellMem(&s16, sizeof(s16)); // 78 56
TellMem(&u16, sizeof(u16)); // 78 56
TellMem(&s8, sizeof(s8)); // 78
TellMem(&u8, sizeof(u8)); // 78
// 小size转化为大size时,转化成signed类型,表示值保持不变。如果要转成unsigned,再按第1原则将其转化成unsigned.
s8 = -1;
s16 = s8;
u16 = s8;
s32 = s16;
u32 = s16;
printf("%d, %d, %d\n", s8, s16, s32); // -1,-1,-1
TellMem(&s8, sizeof(s8)); // FF
TellMem(&s16, sizeof(s16)); // FF FF
TellMem(&u16, sizeof(u16)); // FF FF
TellMem(&s32, sizeof(s32)); // FF FF FF FF
TellMem(&u32, sizeof(u32)); // FF FF FF FF
system("pause");
return 0;
}