CHAR数组转化解决方法
CHAR数组转化
char *p="123.166.227.172";
unsigned char ps[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
以上两种都是什么类型的数据呀?
问题一 :我的问题是 想把123.166.227.172的 IP数据转换成 下面那样的16进制方式,改怎么办
我用 printf("%x",p);可以 在运行窗口中看到 但我想保存成 像PS 那种16进制的
问题二 :另外怎么连接两个PS那种数组,变成一个16进制的
如:unsigned char ps1[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
unsigned char ps2[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
变成
unsigned char ps[12] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30,0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
在线等,
------解决方案--------------------
char *p="123.166.227.172";
unsigned char ps[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
以上两种都是什么类型的数据呀?
问题一 :我的问题是 想把123.166.227.172的 IP数据转换成 下面那样的16进制方式,改怎么办
我用 printf("%x",p);可以 在运行窗口中看到 但我想保存成 像PS 那种16进制的
问题二 :另外怎么连接两个PS那种数组,变成一个16进制的
如:unsigned char ps1[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
unsigned char ps2[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
变成
unsigned char ps[12] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30,0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
在线等,
------解决方案--------------------
- C/C++ code
#include <stdio.h> #include <sys/socket.h> int main(int argc, char* argv[]) { char *p = "123.166.227.172"; unsigned char ps[4]; unsigned long ip; unsigned char ps1[6] = {0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30} unsigned char ps2[6] = {0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30} unsigned char ps3[12]; int i; ip = inet_addr(p); ps[0] = ip >> 24; ps[1] = (ip >> 16) & 0xff; ps[2] = (ip >> 8) & 0xff; ps[3] = ip & 0xff; for(i = 0; i < 6; i++) { ps3[i] = ps1[i]; } for(i = 0; i < 6; i++) { ps3[i + 6] = ps2[i]; } return 0; }
------解决方案--------------------
加上一些打印结果,另外如果你是在Windows下的话,socket.h可能不再sys目录下,需自己寻找:
- C/C++ code
#include <stdio.h> #include <sys/socket.h> int main(int argc, char* argv[]) { char *p = "123.166.227.172"; unsigned char ps[4]; unsigned long ip; unsigned char ps1[6] = {0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}; unsigned char ps2[6] = {0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}; unsigned char ps3[12]; int i; ip = inet_addr(p); ps[3] = ip >> 24; ps[2] = (ip >> 16) & 0xff; ps[1] = (ip >> 8) & 0xff; ps[0] = ip & 0xff; printf("%x, %x, %x, %x\n", ps[0], ps[1], ps[2], ps[3]); for(i = 0; i < 6; i++) { ps3[i] = ps1[i]; } for(i = 0; i < 6; i++) { ps3[i + 6] = ps2[i]; } for(i = 0; i < 12; i++) { printf("%02x ", ps3[i]); } printf("\n"); return 0; }
------解决方案--------------------
char *p="123.166.227.172";
int i,iip[4];
unsigned char ip[4];
sscanf(p,"%d.%d.%d.%d",&iip[0],&iip[1],&iip[2],&iip[3]);
for (i=0;i<4;i++) ip[i]=(unsigned char)(iip[i]&0xFFu);
for (i=0;i<4;i++) printf("0x%02x ",ip[i]);
printf("\n");
如:unsigned char ps1[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
unsigned char ps2[6] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
变成
unsigned char ps[12] ={0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30,0x55, 0x8B, 0xEC, 0x81, 0xC4, 0x30}
memcpy(ps,ps1,6);memcpy(ps+6,ps2,6);