如何将无符号整数分配给C中的枚举?
发布时间:2020-12-16 10:20:38 所属栏目:百科 来源:网络整理
导读:在我正在重写内部的C库中,我有一些无符号整数变量,我想转换为枚举: enum InitType { INIT,NON_INIT}; 我有一个这种类型的变量: InitType InitVar; 该库是从其变量为普通整数的代码的另一部分调用的: uint32_t UnsignedIntVar; 我想将从调用者传递的无符号
在我正在重写内部的C库中,我有一些无符号整数变量,我想转换为枚举:
enum InitType { INIT,NON_INIT }; 我有一个这种类型的变量: InitType InitVar; 该库是从其变量为普通整数的代码的另一部分调用的: uint32_t UnsignedIntVar; 我想将从调用者传递的无符号版本分配给库内部枚举: InitVar = UnsignedIntVar; 但编译器不喜欢这样: error: invalid conversion from 'uint32_t' to 'InitType' 执行此转换的最简洁方法是什么? 以下是我的一些想法: 如果枚举只有两个值,我可以这样做: InitVar = UnsignedIntVar ? Init : NonInit; 这是我想做这样一个任务的时候写的很多东西. 如果它有更多值,我可以创建一个转换表: InitType Uint2InitTypeConv = {INIT_0,INIT_1,INIT_2...}; 其中INIT_x只是枚举的名称.然后我可以使用表格进行翻译: InitVar = Uint2InitTypeConv[UnsignedIntVar]; 这看起来很干净.但是,我认为我应该能够为此重载operator =,但我似乎无法做到这一点.这很容易包含我能提出的任何其他丑陋. 解决方法
您可以显式转换为枚举:
InitType i = InitType(UnsignedIntvar); 如果整数没有与已知枚举值对应的值,那么这就是您的问题. 这是完全可以接受的典型情况是循环枚举: enum ESomething { Default = 0,Something,SomeOtherThing }; for (int i = 0; i != 3; ++i) { ESomething e = ESomething(i); // do something with "e" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |