1

我有一个带有一些十六进制字符的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)转换为字符?所以我可以把它放在Frame数组中

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,因此您可以使用StrToInt...()支持 C++ 中的符号的函数系列,0xXX然后将结果转换为char,例如:

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 回答