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}


在线等,

------解决方案--------------------
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);