如果变体具有 INF 或 NAN 值,如何使变体的 ChangeType 浮动?
我在 Variant 中有浮点值,最初这个变体是 bstr 类型。 我正在使用 VariantChangeType 更改为浮动类型。然后我从中获取浮点值,然后转换为字节向量格式。
如果变量具有浮点值,则效果很好。 如果变体具有 INF 值,则 VariantChangeType 会失败。所以我从variant.fltVal得到0。
如果变量具有 INF 或 NAN 值,如何将类型更改为浮动?我想获取浮点型 INF 或 NAN 值。
Convert(_variant_t varVal,vector<byte> dataArr)
{
HRESULT hr = VariantChangeType( varVal&, &varVal, 0 , VT_R4 );
// Above code is failing if varVal.bstr contains 1.#INF" values
UINT size = 4;
if ( data && dataItem.vt != VT_EMPTY )
{
float value = dataItem.fltVal;
BYTE tmpBuf[4];
memcpy(tmpBuf, &value, sizeof(value));
for( int i = size - 1 ; i >= 0 ; i-- )
{
data->push_back(tmpBuf[i]);
}
retVal = TRUE;
}
}
I am having float value in Variant, Initially this variant is a bstr type.
I am using VariantChangeType to change to float type. and then I am getting float value from it and then i am converting into byte vector format.
If variant has float values this works fine.
If variant is having INF values, VariantChangeType gets failed. So i am getting 0 from variant.fltVal.
How to Changetype to float if variant having INF or NAN values? I want to get INF or NAN values in float.
Convert(_variant_t varVal,vector<byte> dataArr)
{
HRESULT hr = VariantChangeType( varVal&, &varVal, 0 , VT_R4 );
// Above code is failing if varVal.bstr contains 1.#INF" values
UINT size = 4;
if ( data && dataItem.vt != VT_EMPTY )
{
float value = dataItem.fltVal;
BYTE tmpBuf[4];
memcpy(tmpBuf, &value, sizeof(value));
for( int i = size - 1 ; i >= 0 ; i-- )
{
data->push_back(tmpBuf[i]);
}
retVal = TRUE;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用伪语言:
请注意,因为这是一个脆弱的解决方案:它依赖于无穷大和 NaN 的字符串表示形式,也许微软可以在没有警告的情况下更改它们。
这是Raymond Chen的非官方但权威的信息:
-1.#IND 是什么意思?:关于如何Visual C 运行时库会打印特殊的浮点值,即使它与
VARIANT
无关。官方信息是
printf
类型字段字符。in pseudo-language:
Please pay attention because it is a fragile solution: it relies on the string representations of infinity and NaN and maybe Microsoft can change them without warning.
This is an unofficial yet authoritative information by Raymond Chen:
What does -1.#IND mean?: A survey of how the Visual C runtime library prints special floating point values, even if it is not related to
VARIANT
.An official information is
printf
Type Field Characters.