如何在visual c ++中将字符串文字转换为unsigned char数组

Anu*_*uya 13 c++

如何在c ++中将字符串转换为Unsigned char ...

我有,

unsigned char m_Test[8];
Run Code Online (Sandbox Code Playgroud)

我想分配一个字符串"Hello world"m_Test.

怎么做?

小智 20

首先,数组必须至少足以容纳字符串:

 unsigned char m_Test[20];
Run Code Online (Sandbox Code Playgroud)

然后你使用strcpy.您需要转换第一个参数以避免警告:

 strcpy( (char*) m_Test, "Hello World" );
Run Code Online (Sandbox Code Playgroud)

或者如果你想成为C++纯粹主义者:

 strcpy( static_cast <char*>( m_Test ), "Hello World" );
Run Code Online (Sandbox Code Playgroud)

如果你想初始化字符串而不是分配它,你也可以说:

 unsigned char m_Test[20] = "Hello World";
Run Code Online (Sandbox Code Playgroud)

  • 也许值得一提的是,你可以在最后一个例子中删除大小,因为编译器会搞清楚. (8认同)

Buh*_*ndi 5

strncpy(m_Test, "Hello world", sizeof(m_Test));
Run Code Online (Sandbox Code Playgroud)

这是关于strncpy的维基百科:


Ste*_*sop 5

出于所有实际目的,strcpy 的答案是正确的,请注意 8 对您的字符串来说不够大。

如果你想真正迂腐,你可能需要这样的东西:

#include <algorithm>

int main() {
    const char greeting[] = "Hello world";
    unsigned char m_Test[sizeof(greeting)];
    std::copy(greeting, greeting + sizeof(greeting), m_Test);
}
Run Code Online (Sandbox Code Playgroud)

原因是 std::copy 会将原始字符串中的字符转换unsigned char. strcpy 将导致原始字符串中的字符被重新解释unsigned char. 你没有说你想要哪一个。

该标准允许两者之间存在差异,尽管这种差异非常罕见:char在使用 1 的补码或符号大小表示的实现中,您需要签名。您几乎可以忽略这种可能性,但 IMO 值得了解,因为它解释了当您混淆指向char和 的指针时优秀编译器给您的有趣警告unsigned char

  • 大多数情况下是正确的,但 `sizeof` 不是一个函数,而 `sizeof(greeting)` 是一个整数常量表达式。您可以通过某些方式在整数常量表达式中“使用变量”,这就是其中之一,因为不使用 `greeting` 的值,只使用类型,即 `const char[12]`。 (2认同)