2015-08-16 39 views
-3

前言:將存儲爲字符串的十六進制數據轉換爲文件

我正在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文件。不幸的是,我還沒有找到辦法。

給定一個字符串,看起來像上面(或我可以使用查找/替換),我將如何去創建一個工作的.ttf文件?

+0

什麼東西你叫「.ttf」如果不是文件?如果你已經有一個文件,爲什麼你需要創建一個文件? – stark

+0

在我的電腦上,我剛剛下載了該文件並手動將其放入數據文件夾中。我希望能夠給予某人可執行文件並使其工作,而不需要單獨下載字體文件。基本上我想將字體文件打包在可執行文件本身(存儲爲十六進制數據字符串) – Gus

+0

爲什麼不打包程序,以便安裝它需要的資源文件? – stark

回答

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 
... 

然後,使用帶有正則表達式的支持(如昇華文本)文本編輯器來獲取數據看起來像這樣

{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()

相關問題