我有一个我无法解决的问题。假设我有这个 map 定义:
map<string, int16_t> Registers;
但有时,我需要存储一个无符号 int16_t 而不是一个有符号 int16_t。 我该怎么做?
谢谢。
最佳答案
您可以使用更大的fish 类型,例如int32_t
,或者使用boost::variant
。
int32_t
可以存储 int16_t
或 uint16_t
可以存储的所有值,并保留它们之间的差值,例如 32768和 -32768(假设二进制补码)。如果您对 int16_t
和 uint16_t
使用某种转换方案,则它们之间的差异将丢失,因为两者都将存储为 0x8000。区分像 0x8000 这样的值需要带外信息,如果有的话,你没有提到。
但是,int32_t
不会保留 32767 有符号和 32767 无符号之间的差异。如果这很重要,那么 boost::variant
可以保留该信息。
关于C++ map 定义基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9874557/