Подтвердить что ты не робот

Как преобразовать строковый литерал в неподписанный массив char в visual С++

Как преобразовать строку в Unsigned char в С++...

У меня есть

unsigned char m_Test[8];

Я хочу назначить строку "Hello world" на m_Test.

как это сделать?

4b9b3361

Ответ 1

Во-первых, массив должен быть как минимум достаточно большим, чтобы удерживать строку:

 unsigned char m_Test[20];

то вы используете strcpy. Вам необходимо указать первый параметр, чтобы избежать предупреждения:

 strcpy( (char*) m_Test, "Hello World" );

Или, если вы хотите быть пуристом С++:

 strcpy( static_cast <char*>( m_Test ), "Hello World" );

Если вы хотите инициализировать строку, а не назначать ее, вы также можете сказать:

 unsigned char m_Test[20] = "Hello World";

Ответ 2

strncpy(m_Test, "Hello world", sizeof(m_Test));

Здесь Wikipedia на strncpy:

Ответ 3

Во всех практических целях ответы на 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);
}

Причина в том, что std:: copy преобразует символы в исходной строке в unsigned char. strcpy приведет к тому, что символы исходной строки будут интерпретированы как unsigned char. Вы не говорите, какой из них вам нужен.

Стандарт допускает разницу между ними, хотя он очень редок: вам нужно char подписать, в реализации с представлением 1s или значком. Вы можете в значительной степени игнорировать возможность, но ИМО это стоит знать, потому что это объясняет смешные предупреждения, которые дают хорошие компиляторы, когда вы смешиваете указатели на char и unsigned char.

Ответ 4

Вы можете использовать функцию копирования строк, например strcpy или даже лучше strncpy, который также имеет некоторые проверки размера:

strncpy ((char*) m_Test,"Hello World",8);

Ответ 5

вы можете использовать функцию strcpy Но имейте в виду, что m_Test имеет размер только 8, и будет переполнение. Strcpy не проверяет это, и вы получите исключение

char * strcpy ( char * destination, const char * source );

Ответ 6

Вы можете использовать c_str() функцию std::string, чтобы получить char* из строки. Этот метод в основном возвращает указатель на строку c-style. После этого вы можете использовать обычные функции копирования строк, такие как strcpy или strncpy, чтобы скопировать значение в test.

Ответ 7

Вы можете использовать strcpy:

unsigned char m_Test[8];
strcpy((char*)m_Test, "Hello world");

Обратите внимание, что "Hello world" слишком длинный для 8 байтов, поэтому вы, вероятно, получите segfault.