我正在使用C ++语言开发Adobe Type 1字体的解析器。当我尝试解码DICT数据时出现问题。
DICT中的操作数,在PDF文件中以字节顺序存储,可以是整数或实数。
我定义了一个函数,其原型为getOperandVal(unsigned char* buf)
,用于将序列解码为数字。问题出现了。
在解析buf之前,我们无法知道buf是实数还是整数。所以我无法确定返回值类型,它应该是int
或double
。
解决方案是使用struct作为返回值类型。结构如下所示:
typedef struct
{
int interger;
double real;
bool bReal;
}RET;
然后函数原型是:
RET getOperandVal(unsigned char* buf);
但我觉得它不紧凑。首先,使用起来不方便。其次,当数据量很大时,程序运行速度会变慢。
有人能给我一个更好的解决方案吗?模板能做到吗?
非常感谢!
增加: 程序将操作数值转换为字节序列,以便在编辑后重写为文件。请考虑这个要求。