我发现使用strtol
将十六进制字符串转换为signed int
的代码,但我找不到短int(2字节)的内容。这里的代码我的作品:将带前导“0x”的十六进制字符串转换为C++中的带符号短符号?
while (!sCurrentFile.eof())
{
getline (sCurrentFile,currentString);
sOutputFile<<strtol(currentString.c_str(),NULL,16)<<endl;
}
我的想法是读取文件用2个字节宽值(如0xFFEE),将其转换为符号的int和输出文件中写入结果。执行速度不是问题。
我能找到一些方法来避免这个问题,但我想用“一条线”的解决方案,所以也许你可以帮助这个:)
编辑:文件看起来是这样的:
0x0400
0x03fe
0x03fe
...
编辑:我已经尝试过使用十六进制运算符,但我仍然必须将字符串转换为整数,然后才能这样做。
// This won't work as currentString is not an integer
myInt << std::hex << currentString.c_str();
什么是您的输入文件是什么样子?没有这些信息就很难提出任何建议。 – hrnt 2009-09-28 14:53:04
请参阅strtol返回long,未签名int, – Satbir 2009-09-28 14:54:59
sscanf返回int,但scanf-family函数的返回值是它们成功转换的字段数。虽然我很欣赏这个宣传,但是你错了。 :) – ChrisV 2009-09-28 17:50:19