【发布时间】:2011-03-08 07:55:36
【问题描述】:
我需要在 C++ 中将时间从一种格式转换为另一种格式,并且它必须是跨平台兼容的。我创建了一个结构作为我的时间容器。结构字段还必须是旧代码指定的unsigned int。
struct time{
unsigned int timeInteger;
unsigned int timeFraction;
} time1, time2;
数学上的转换如下:
time2.timeInteger = time1.timeInteger + 2208988800
time2.timeFraction = (time1.timeFraction * 20e-6) * 2e32
这是我在 C++ 中的原始代码,但是当我尝试写入二进制文件时,转换后的时间与真实数据不匹配。我认为这个问题是由于类型转换错误造成的?此代码将在 VS2008 中编译并执行。
void convertTime(){
time2.timeInteger = unsigned int(time1.timeInteger + 2209032000);
time2.timeFraction = unsigned int(double(time1.timeFraction) * double(20e-6)*double(pow(double(2),32)));
}
【问题讨论】:
-
@shuttle87:“更好”可以解释,但在这种情况下翻译为“不会编译”,很少有人发现它本身有改进。
-
@shuttle87:
reinterpret_cast不能用于转换数字类型;你需要static_cast。这不是使用 C 风格的转换,而是使用 C++ 初始化风格的转换。就个人而言,我发现数字转换比static_cast更容易。 -
虽然我相信
unsigned int(value)由于技术原因是无效的,但被大多数编译器接受。 -
@Mike 我用的是VS2008,代码会编译执行
-
您确定要 2e32 而不是 pow(2,32) 吗?无论哪种方式,您的公式似乎都有点可疑。
标签: c++ datetime time casting type-conversion