序:
我在C ++中创建一个涉及字体的简单程序。目前,当它执行时,它创建一个包含文本文件的数据文件夹,如自述文件,但我还没有找到一种方法来自动创建我的程序需要显示文本的.ttf。我的第一直觉是在文本编辑器中打开.ttf并尝试将该文本写入文件,但当然这不起作用。
问题:
我有一个文件,我转换成这样的十六进制数据
00 01 00 00 00 10 00 40 00 04 00 c0 4f 53 2f 32
80 8f 7e ff 00 00 8e b8 00 00 00 4e 50 43 4c 54
... 2298 more lines
我觉得我应该能够将这个十六进制数据硬编码到我项目中的字符串中,然后我应该能够在我的程序执行时使用这些数据来创建.ttf文件。不幸的是,我还没有找到办法。
给定一个类似于上面的字符串(或者我可以使用find / replace创建的字符串),我将如何创建一个有效的.ttf文件?
答案 0 :(得分:0)
首先获取文件的十六进制数据,它可能看起来像这样
00 01 00 00 00 10 00 40 00 04 00 c0 4f 53 2f 32
80 8f 7e ff 00 00 8e b8 00 00 00 4e 50 43 4c 54
...
然后,使用带有正则表达式支持的文本编辑器(如sublime文本)来获取这样的数据
{0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x04, 0x00, 0xc0, 0x4f, 0x53, 0x2f, 0x32,
0x80, 0x8f, 0x7e, 0xff, 0x00, 0x00, 0x8e, 0xb8, 0x00, 0x00, 0x00, 0x4e, 0x50, 0x43, 0x4c, 0x54,
...}
您可以在任何地方定义文件以将数据输出到
std::ofstream file;
file.open("<path>", std::ios::binary);
为此后续数组创建一个新的.cpp,因为它非常庞大且难以处理。我刚刚创建了一个具有一个函数writeHextoFile(std::ofstream& file)
的类,并将其放在其中
size_t data_len = <number of elements in array>
unsigned char data[data_len] = {<from above>}
file.write((char *)&data[0], data_len);
现在,回到您定义ofstream文件的位置,只需致电writeHextoFile(file)
,最后使用file.close()