gpt4 book ai didi

c - 如何在 C 中将 char 指针转换为 uint8_t 数组?

转载 作者:行者123 更新时间:2023-11-30 18:35:10 27 4
gpt4 key购买 nike

我需要将字符串 (char*) 转换为 __uint8_t 数组。我知道后者是 unsigned char 的别名,但我不知道如何正确转换它。

示例:

char *ssid = "XXXXX";

这是必要的,因为我必须调用一个仅接受 __uint8_t 数组而不接受 char* 数组的 API。

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 时我还是个青少年。

提前致谢!

最佳答案

刚刚转换:

const char *name = "My Full Name";
yourAPIFunction((__uint8_t *) name);

注意:这违反了常量正确性。您必须确保yourAPIFunction不会改变name。如果是这样,那么您需要将其memcpy(以及free!)到局部变量中,并提供给它,这样它的突变就不会影响池化的变量。 -“我的全名”的任何其他用户使用的字符串。

对您的(完全不同的)更新问题的回复:

这些数组的存储是内联的,它们不像典型的 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;
}

关于c - 如何在 C 中将 char 指针转换为 uint8_t 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com