Как преобразовать строку в Unsigned char в С++...
У меня есть
unsigned char m_Test[8];
Я хочу назначить строку "Hello world"
на m_Test
.
как это сделать?
Как преобразовать строку в Unsigned char в С++...
У меня есть
unsigned char m_Test[8];
Я хочу назначить строку "Hello world"
на m_Test
.
как это сделать?
Во-первых, массив должен быть как минимум достаточно большим, чтобы удерживать строку:
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";
strncpy(m_Test, "Hello world", sizeof(m_Test));
Здесь Wikipedia на strncpy:
Во всех практических целях ответы на 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
.
Вы можете использовать функцию копирования строк, например strcpy или даже лучше strncpy, который также имеет некоторые проверки размера:
strncpy ((char*) m_Test,"Hello World",8);
вы можете использовать функцию strcpy Но имейте в виду, что m_Test имеет размер только 8, и будет переполнение. Strcpy не проверяет это, и вы получите исключение
char * strcpy ( char * destination, const char * source );
Вы можете использовать c_str()
функцию std::string
, чтобы получить char*
из строки. Этот метод в основном возвращает указатель на строку c-style. После этого вы можете использовать обычные функции копирования строк, такие как strcpy
или strncpy
, чтобы скопировать значение в test
.
Вы можете использовать strcpy
:
unsigned char m_Test[8];
strcpy((char*)m_Test, "Hello world");
Обратите внимание, что "Hello world" слишком длинный для 8 байтов, поэтому вы, вероятно, получите segfault.