我正在尝试将自定义的char常量(在头文件中使用#define
)转换为无符号的Short int(为了能够使用htons()来处理它得到网络字节顺序)。
我在一个单独的头文件中定义了一个结构,将PORT,HOSTNAME和GAMEKINDNAME分组(我相信常量名称非常明显;它们都分别存储为char数组)。
初始化结构的规范如下所示:
struct Config configuration_parameters = {
.type_of_game = GAMEKINDNAME,
.hostname = HOSTNAME,
.port = (unsigned short) PORT
};
编译时,我收到以下错误:
警告:从指针强制转换为不同大小的整数
错误:初始化元素不是常量
我认为这可能是因为char使用1字节存储,而unsigned short使用2字节存储,这可能代表某种冲突......这种假设是正确的,如果是这样(如果是这样的话)或者即使没有),任何人都知道如何解决这个问题?
任何帮助将不胜感激!
答案 0 :(得分:1)
我认为你PORT
的声明看起来或多或少是这样的:
const char *PORT = "12345";
如果你将其强制转换为unsigned short
,你将不转换值,而是指向"12345"
的指针。使用像atoi这样的函数来实现:
struct Config configuration_parameters = {
.type_of_game = GAMEKINDNAME,
.hostname = HOSTNAME,
.port = 0
};
configuration_parameters.port = (unsigned short)atoi(PORT);