自定义char-array常量类型转换为unsigned short?

时间:2013-11-28 14:19:21

标签: c arrays c-preprocessor unsigned-integer

我正在尝试将自定义的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字节存储,这可能代表某种冲突......这种假设是正确的,如果是这样(如果是这样的话)或者即使没有),任何人都知道如何解决这个问题?

任何帮助将不胜感激!

1 个答案:

答案 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);