如何将0之后的十六进制值存储到c中的char指针中

时间:2017-03-28 15:10:11

标签: c string pointers char hex

我遇到了存储中间有0的十六进制值的问题。 1)我以大小为17的macAddress的形式获得字符串的值。 2)将它们转换为十六进制并将其存储为大小为6的字符串。 当在中间添加0时,不能在0之后存储它。仅存储0之前的值。 以下是编写的示例代码:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

int hestToMacStr(char **charPtrPtr)
{
    unsigned int mac0, mac1, mac2, mac3, mac4, mac5;
    char *str = *charPtrPtr;

    /* initialize the variables */
    mac0 = mac1 = mac2 = mac3 = mac4 = mac5 = 0;

    sscanf( *charPtrPtr, "%x:%x:%x:%x:%x:%x", &mac0, &mac1, &mac2, &mac3, &mac4, &mac5 );

    str[0] = mac0 & 0xFF;
    str[1] = mac1 & 0xFF;
    str[2] = mac2 & 0xFF;
    str[3] = mac3 & 0xFF;
    str[4] = mac4 & 0xFF;
    str[5] = mac5 & 0xFF;
    str[6] = '\0';
    printf("charPtrPtr: %s, str: %s, mac: %x,%x,%x,%x,%x,%x\n", *charPtrPtr, str, str[0], str[1], str[2], str[3], str[4], str[5]);
}

int main()
{
    char *haystack = ( char * ) malloc (18);
    int i = 0;

    sprintf(haystack,"66:66:66:00:66:66"); //code1
    sprintf(haystack,"66:66:66:66:66:66"); //code2
    hestToMacStr(&haystack);
    printf("haystack: %s, Mac: %02x:%02x:%02x:%02x:%02x:%02x\n", haystack, haystack[0], haystack[1], haystack[2], haystack[3], haystack[4], haystack[5]);

    free(haystack);

    return(0);
}
Output1: 
charPtrPtr: fff, str: fff, mac: 66,66,66,0,66,66
haystack: fff, Mac: 66:66:66:00:66:66

Output2: 
charPtrPtr: ffffff, str: ffffff, mac: 66,66,66,66,66,66
haystack: ffffff, Mac: 66:66:66:66:66:66

output1用于code1,output2用于code2。 对于code1,预期的output1是:fff0ff。任何人请指导我如何将所有值存储到我的charPtr。

谢谢,丹尼斯

0 个答案:

没有答案