1

次のような16進文字を含むiniファイルがあります。

[FOO]
1=0x55
2=0x40
3=0x90

まず、これは ini ファイルの正しい形式ですか、それとも \x50 を使用する必要がありますか?

第二に、どうやって文字を読むことができますか?私はこれを持っています:

char Frame[4]
TIniFile* IniFile;
IniFile=new TIniFile(cPath+"\\"+"setup.ini");
for( int i = 1; i < 4; i++ )
{
 Frame[i]=IniFile->ReadString("FOO",i,-1); 
}

問題は、IniFile->ReadChar が存在しないことです (私は borland c++ builder 6 を使用しています)。

文字列 (たとえば 0x55) を char にキャストするにはどうすればよいですか? だから私はそれをフレーム配列に入れることができます

4

3 に答える 3

1

解決:

AnsiString string;
TIniFile* IniFile;
IniFile=new TIniFile(cPath+"\\"+"setup.ini");
for( int i = 1; i < 5; i++ )
{
 string=IniFile->ReadString("FOO",i,-1);
 Frame[i]=static_cast<char>(std::strtol(string.c_str(), 0, 16));
}
于 2012-08-23T12:07:19.420 に答える
1

この\x55表記は通常、文字列リテラル内で使用されます。

const char* s = "\x55";

ファイルへの書き込み0x55は一般的ですが、最終的には、ファイルが何を消費しているかを知るのは、ファイルを処理するコード次第です。

コメントすることはできませんIniFileが、値を に格納できれば、整数値を取得するためにchar[]使用できます。std::strtol()

const char* s = "0x55";
long value = std::strtol(s, 0, 16);

また、配列インデックスはゼロベースであるため、forループが配列の境界を超えていることに注意してください。Frameの有効なインデックスFrame01あり、ループが未定義の動作である2アクセスのみを行います。3変更: for(int i = 0; i < 3; i++)

配列インデックスはゼロベースであるため、forループは の最初の要素を設定しないことに注意してください(意図的かどうかは不明です)。Frame

于 2012-08-23T11:31:59.860 に答える
0

VCLを使用しているので、C ++での表記StrToInt...()をサポートする関数ファミリーを使用して、結果を次のようにキャストできます。0xXXchar

for( int i = 0; i < 4; i++ )
{
    Frame[i] = (char) StrToIntDef(IniFile->ReadString("FOO", i+1, ""), -1);
}

または:

for( int i = 0; i < 4; i++ )
{
    Frame[i] = (char) IniFile->ReadString("FOO", i+1, "").ToIntDef(-1);
}
于 2012-09-07T02:32:34.923 に答える