我需要将字符串(char *)转换为__uint8_t数组。我知道后者是unsigned char的别名,但我无法弄清楚如何正确转换它。
示例:
char *ssid = "XXXXX";
这是必要的,因为我必须调用一个只接受__uint8_t数组的API,而不是char *。
struct WifiConfig {
uint8_t ssid[32];
uint8_t password[64];
};
struct WifiConfig wifi_config;
wifi_config.ssid = ???
如果我试图施放:
wifi_config.ssid = (__uint8_t *) ssid;
我收到以下错误:
error: assignment to expression with array type
wifi_config.ssid = (__uint8_t *) ssid;
对不起,如果这是一个愚蠢的问题,上次我和C一起玩的时候,我还是个孩子。
提前致谢!
答案 0 :(得分:3)
刚演员:
const char *name = "My Full Name";
yourAPIFunction((__uint8_t *) name);
注意:这违反了const-correctness。您必须确保yourAPIFunction
不会改变name
。如果确实如此,那么您需要memcpy
(和free
!)它到一个局部变量,并提供它,因此它的突变不会影响汇集字符串由"My Full Name"
的任何其他用户使用。
这些数组的存储内联,它们不像典型的char *
那样指向堆的指针。你需要将字符串的内容复制到它们中:
// ssid must be at most 31 chars (plus NUL terminator)
// password must be at most 63 chars (plus NUL terminator)
struct WifiConfig new_wifi_config(char *ssid, char *password) {
struct WifiConfig wifi_config;
memcpy(wifi_config.ssid, ssid, strlen(ssid)+1)
memcpy(wifi_config.password, ssid, strlen(ssid)+1)
return wifi_config;
}
答案 1 :(得分:0)
我需要将字符串(char *)转换为__uint8_t数组。我知道 后者是unsigned char的别名,但我无法弄清楚如何 正确地转换它。
迂腐 - 因为这里很重要 - C字符串是而不是 a char *
。相反,它是char
的以null结尾的数组。主要通过char *
类型的指针来访问和处理它们,主要是因为这是C语言中数组的工作方式。
因此,不,您不希望将char *
转换为数组。看来你想要做的是复制它所指向的数组的内容。出于特定目的,我将使用strncpy()
函数:
strncpy((char *) wifi_config.ssid, ssid, sizeof(wifi_config.ssid));
请注意,使用该代码,如果ssid
长于wifi_config.ssid
可以容纳,那么后者最终将被终止,否则其尾部将填充空字节。给定该数组的类型,这种行为可能正好需要什么。但是,如果要确保空终止,则只需在strncpy()
之后用0覆盖数组的最后一个字节。