2012-11-09 116 views
0

我收到编译错误的项目代码,其中的情况如下:如何转换为32位整数为64位值在C

typedef unsigned int U32bit; 
typedef unsigned long long U64bit; 

U32bit  var; 
U64bit  var2; 

var = function(); /* Function returns a 32-bit value, which is stored in var */ 

var2 = 100*var1; /* 100*var1 is very Big & can be stored only in U64bit variable */ 

For the Above Line: var2 = 100*var1 

我正在在Solaris下编译错误:

"conversion to non-scalar type requested" 

我也曾尝试类型转换:

var2 = (U64bit) 100*var1; 

这也给出了同样的错误。

+2

什么是'var1'你只声明'var',不是? –

+0

U32bit =无符号32位整数 –

+0

U64bit =无符号64位整数 –

回答

0

您确定这种类型的“U64bit”实际上被定义为一个整数吗?如果不是,那可能是问题,它可能是一个标量类型的struct

您也没有指定您正在使用的编译器或操作系统。如果它符合C标准,则应该使用#include <stdint.h>并使用uint32_tuint64_t而不是U32bitU64bit

+0

你是不是故意说类和结构是非标量类型?另外,C中没有类。 – mizo

0

尝试以下操作:

var2 = (U64bit)var1 * 100; 

编辑

也许

var2 = (U64bit)var1 * 100LL; 

反正U32Bit报关,U64Bi吨和function将是有益的。

+0

已经尝试过。它不起作用 –

+0

整数升级在C标准中定义明确,C编译器不需要显式LL。 – Lundin

+0

@Lundin - 有时更明确是有用的。编译器并不总是遵守标准。 –

2

什么是U64bit?这是一个非标准类型,所以你必须显示它的声明。

听起来好像是struct

2

C中的标准固定宽度整数类型是uint32_tuint64_t,请尝试使用它们。然后可以用UINT64_C(100)来定义该类型的常量。

出现这些类型,您可能需要

#include <stdint.h> 

添加到您的包含。

相关问题