我有一个包含一些十六进制字符的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-&gt; ReadChar不存在(我使用的是borland c ++ builder 6)。
如何将字符串(例如0x55)转换为char?所以我可以把它放在 Frame 数组
中答案 0 :(得分:1)
\x55
表示法通常在字符串文字中使用:
const char* s = "\x55";
当写入文件0x55
很常见时,最终由代码处理文件以了解它正在消耗的内容。
我无法对IniFile
发表评论,但如果您可以设法将值存储到char[]
,则可以使用std::strtol()
获取整数值:
const char* s = "0x55";
long value = std::strtol(s, 0, 16);
另外,请注意 for
循环超出了数组Frame
的范围,因为数组索引基于零。 Frame
的有效索引仅为0
,1
和2
,但循环将访问3
,这是未定义的行为。改成:
for(int i = 0; i&lt; 3; i ++)
注意for
循环不会填充Frame
的第一个元素,因为数组索引是基于零的(不确定这是否是故意的)。
答案 1 :(得分: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));
}
答案 2 :(得分: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);
}