我得到一个包含需要转换为整数的原始二进制数据的字符串。问题是这些值并不总是以相同的顺序出现,也不总是出现。因此,二进制数据的格式在配置文件中进行了描述,并且从二进制数据中读取的值的类型在编译时是未知的。
我正在考虑类似的解决方案:
enum BinaryType {
TYPE_UINT16,
TYPE_UNIT32,
TYPE_INT32
};
long convert(BinaryType t, std::stringstream ss) {
long return_value;
switch(t) {
case TYPE_UINT16:
unsigned short us_value;
ss.read(&us_value, sizeof(unsigned short));
return_value = short;
break;
case TYPE_UINT32:
unsigned int ui_value;
ss.read(&ui_value, sizeof(unsigned int));
return_value = ui_value;
break;
case TYPE_INT32:
signed int si_value;
ss.read(&si_value, sizeof(signed int));
return_value = si_value;
break;
}
return return_value;
}
目标是以十进制输出这些值。
我的问题是:
- 这段代码非常重复。有没有更简单的解决方案?(模板?)
- 我应该使用标准类型,例如
signed int
值是否需要为 32 位?改用什么?字节序?