1

我需要将我拥有的东西修改stringList为十六进制,并且我需要在内部进行修改,MyFunction因为WriteI2C需要采用十六进制值。例如,如果stringList包含“5”和“A”,我想将 0x5A 传递到WriteI2C.

char* stringList[5]; // array of strings (max 5 strings)
char* (*stringListPtr); // pointer to a string

void MyFunction(char* (char* (*stringListPtr))
{
    WriteI2C(a hex value); // ex: WriteI2C(0x5A);
}
4

1 回答 1

2

你可以使用以 NUL 结尾的数组char(又名 C 字符串)吗?如果是这样的话:

const char *str = "5A";
int val = strtol(str, NULL, 16);
WriteI2C(val);

如果没有,您可能想要制作一个以 NUL 结尾的副本,或者重新发明轮子(注意:不要重新发明轮子):

int ch2hex(char ch)
{
    if (isdigit(ch)) return ch - '0';
    if (islower(ch)) return ch - 'a' + 10;
    if (isupper(ch)) return ch - 'A' + 10;
    // if this is reached, something very nasty is going on
}

int str2hex(char arr[2])
{
    return (ch2hex(arr[0]) << 4) | ch2hex(arr[1]);
}
于 2013-02-06T21:51:35.690 回答