簡単なC++コード:
int main(){
unsigned char* t="123";
}
g ++でコンパイルすると、次のエラーが発生します。
invalid conversion from ‘const char*’ to ‘unsigned char*’ [-fpermissive]
どうして?
C++では、文字列リテラルには定数文字配列のタイプがあります。たとえば、文字列リテラル"123"
の型はconst char[4]
です。
まれな例外を含む式では、配列は最初の要素へのポインターに変換されます。
したがって、この宣言では
unsigned char* t="123";
初期化子のタイプはconst char *
です。 const char *
からunsigned char *
への暗黙的な変換はありません
あなたは書くことができます
const unsigned char* t = reinterpret_cast<const unsigned char *>( "123" );
最初に望んでいた変更可能なunsigned char
配列を取得する別のアプローチは次のとおりです。
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;
int main()
{
unsigned char ta[] = "123";
unsigned char* t = ta;
cout << t << endl; // Or ta.
return EXIT_SUCCESS;
}
必要に応じて、両方の宣言にconst
を追加して、明示的なキャストなしでconst unsigned char
を取得できます。
自己定義マクロを使用すると、あるタイプから別のタイプへの変換が簡単になります。そのため、ここには、任意のプラットフォーム(Windows、Linux、Solaris、AIXなど)で使用できるマクロのセットがあります。
#define M_ToCharPtr(p) reinterpret_cast<char*>(p) // Cast to char*
#define M_ToWCharPtr(p) reinterpret_cast<wchar_t*>(p) // Cast to wchar_t*
#define M_ToConstCharPtr(p) reinterpret_cast<const char*>(p) // Cast to const char*
#define M_ToConstWCharPtr(p) reinterpret_cast<const wchar_t*>(p) // Cast to const wchar_t*
#define M_ToUCharPtr(p) reinterpret_cast<unsigned char*>(p) // Cast to unsigned char*
#define M_ToConstUCharPtr(p) reinterpret_cast<const unsigned char*>(p) // Cast to const unsigned char*
#define M_ToUCharPtr(n) reinterpret_cast<unsigned char*>(n) // Cast to unsigned char*
#define M_ToVoidPtr(p) reinterpret_cast<void*>(p) // Cast to void*
#define M_ToConstVoidPtr(p) reinterpret_cast<const void*>(p) // Cast to const void*
#define M_ToIntPtr(n) reinterpret_cast<int*>(n) // Cast to int*
#define M_ToConstIntPtr(p) reinterpret_cast<const int*>(p) // Cast to const int*
#define M_ToDoublePtr(n) reinterpret_cast<double*>(n) // Cast to double*
#define M_ToConstDoublePtr(n) reinterpret_cast<const double*>(n) // Cast to const double*
#define M_ToBoolPtr(n) reinterpret_cast<bool*>(n) // Cast to bool*
#define M_ToConstBoolPtr(n) reinterpret_cast<const bool*>(n) // Cast to const bool*
// General Cast
#define M_To(T, p) reinterpret_cast<T>(p) // Cast to T
あなたの場合
const unsigned char* t = reinterpret_cast<const unsigned char *>("UCHAR TO CONST UCHAR");
に等しい
const unsigned char* t = M_ToConstUCharPtr("UCHAR TO CONST UCHAR");
単に使用する
宣言中にunsigned char *の代わりにchar *のみ
char t [MAX_SIZE] = "123"; // MAX_SIZEは前に定義する必要があります
時間テストstrcpy()およびstrncpy関数