从ini文件中读取十六进制字符
Read hex characters from an ini file
我有一个包含一些十六进制字符的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不存在(我使用的是borlandc++builder6)。
如何将字符串(例如0x55)转换为char?所以我可以把它放在帧数组
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
,这是未定义的行为。更改为:对于(int i=0;i<3;i++)
请注意,for
循环不会填充Frame
的第一个元素,因为数组索引是从零开始的(不确定这是否有意)。
解决方案:
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));
}
由于您使用的是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);
}
相关文章:
- 打印十六进制字符
- 从十六进制字符串转换为十六进制字符数组
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 如何在C 中的Little Endian中读取来自二进制文件的单独的十六进制字符
- 如何在C++中将十六进制字符转换为二进制
- 未报告的错误VS 2015:十六进制字符说明符
- 如何将十六进制字符数组转换为C 中的字符串
- 十六进制字符数组 2 x 2 个字符以uint8_t
- 从ini文件中读取十六进制字符
- C++将带有十六进制字符的.txt转换为前面带有x的带有六进制字符的txt
- 将十六进制字符馈送到字符串流
- int数字中的十六进制*字符
- 将双rgba颜色值转换为十六进制字符
- 十六进制字符到十进制,并将输出存储为字符
- 字符串到十六进制字符数组
- C/C++ 十六进制字符* 到字节数组
- 将字符串化的十六进制字符转换为std::string
- 将十六进制字符值转换为其字符串文本以在流上使用
- 以二进制模式扫描文件,并将十六进制字符解释为C++中的实际数字
- 十六进制字符到std::string的Constexpr转换