printf("%02X#",*(uint8_t *)&list+i);
48#49#4A#4B#4C#4D#4E#4F#50#51#52#53#54#55#56#57
显然错误!!
printf("%02X#",*((uint8_t *)&list+i) );
48#F2#00#20#49#E9#00#08#01#00#00#00#30#12#00#20#
基本对头!!
打印U64一定要%llX 记住!
#include<stdio.h>
#include <string.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
struct
{
unsigned char weight;
unsigned char hight;
}test;
int main(void)
{
unsigned char i = 0;
test.weight=5;
test.hight=8;
unsigned char arr[4]={0x01,0X02,0X03,0X04} ;
for(i=0;i<4;i++)
printf("%d-",*(arr+i) ) ;//*(arr+i)//*arr+i//(*arr)+i//*( (unsigned char*)arr+i) )//*( (unsigned char*)arr)+i)
for(i=0;i<2;i++)
printf("%d-",*( (unsigned char*)&test+i ) );//i 是int也可以 因为i=0 1 2 死了
}
//1-2-3-4-5-8-[Finished in 1.2s]
for(i=0;i<4;i++)
printf("%d-",arr+i )
6422315-6422316-6422317-6422318-5-8-[Finished in 1.3s]
for(i=0;i<4;i++)
printf("%d-",&arr+i )
6422315-6422319-6422323-6422327-5-8-[Finished in 1.3s]
此时修改为:
unsigned char arr[5]={0x01,0X02,0X03,0X04} ;
for(i=0;i<4;i++)
printf("%d-",&arr+i ) ;
表现为:6422314-6422319-6422324-6422329-5-8-[Finished in 1.2s]
现在明白了吧
#include<stdio.h>
#include <string.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef struct
{
uint8_t ip[50];
uint16_t port;
}serverAddrType;
#if 0
serverAddrType addr;
int main(void)
{
unsigned char i = 0;
memcpy(addr.ip,"192.168.1.0",11);
addr.port=1883;
for(i=0;i<52;i++)
printf("%c-",*( (unsigned char*)&addr+i ) );//i 是int也可以 因为i=0 1 2 死了
}
#else
serverAddrType addrins;
serverAddrType *addr=&addrins;
int main(void)
{
unsigned char i = 0;
memcpy(addr->ip,"192.168.1.0",11);
addr->port=1883;
for(i=0;i<52;i++)
printf("%c-",*( (unsigned char*)addr+i ) );//i 是int也可以 因为i=0 1 2 死了
}
#endif
结论:
*( (unsigned char*)addr+i )
*( (unsigned char*)&addr+i )