bin2cEX
bin2cEX est un programme qui convertit des données binaires vers un tableau compatible avec le language C.
Utile pour importer vos fichiers de données directement dans votre programme.
Exemples: textures, sons, maps de caractères, etc.
Usage:
bin2cEX [chemin_fichier_entrée] [chemin_fichier_sortie] [nom_tableau] [arguments...]
bin2cEX possède trois différents types de sortie: tableau dans un seul fichier, prototype du tableau dans un fichier d'en-tête et tableau dans un fichier source, valeurs du tableau dans un seul fichier.
Cas d'utilisation:
Dans SimpleVolumeMixer, j'avais besoin de charger les glyphes pour des caractères UTF8, non-compatible avec ASCII: quelques symboles, quelques kanji ansi que les kana.
Cependant, le support UTF8 en C et C++ pour les chaînes de caractères est, au moment où j'écris ce paragraphe (2025), honnêtement merdique.
Alors j'ai simplement eu l'idée d'écrire un fichier texte qui aura pour but de contenir tous ces caractères UTF8 dont j'ai besoin, parce que c'est beaucoup plus simple à éditer:
// utf8_charmap
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()*+,-./\:;<=>?@[]^_{|}~‘’“”„•§©®™⁰¹²³⁴⁵⁶⁷⁸⁹
// utf8_charmap_ja
あいうえおかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよらりるれろわをんゃゅょゎっアイウエオカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドナニヌ
ネノハヒフヘホバビブベボパピプペポマミムメモヤユヨラリルレロワヲンャュョヮッ。、、?!「」『』()【】〝〟ー々― 〠※一二三四五六七八九十百千万上下左右中大小川山女男女子先生年目口目耳手足体内外水火木金土天空正早友力心電話食学校店時日月年明
暗立歩死生学使売購買貸借決計賞成立使上進退長短強弱忘会語死食明用近遠転寝開閉出入止行来見思記何読書習見覚難簡倍積速遅話明結休直売品受供支払起着増減関現上下大小二三平山川左右正直明日教進終開始安社動計
Je peux maintenant générer les données d'un tableau en C avec l'aide de bin2cEX:
bin2cEX.exe utf8_charmap utf8_charmap.c utf8_charmap -output_type raw_array_data_file
bin2cEX.exe utf8_charmap_ja utf8_charmap_ja.c utf8_charmap_ja -output_type raw_array_data_file
Ainsi je peux inclure dans mon code les données générées:
u8 UTF8_CHARMAP_DATA[] =
{
#include "utf8_charmap.c"
, // Malheureusement je ne peux pas mettre de virgule sur la même ligne que la directive de préprocesseur "include" (testée sur MSVC).
#include "utf8_charmap_ja.c"
};
utf8_font_characters UTF8_FONT_CHARMAP =
{
.data = UTF8_CHARMAP_DATA,
.count = utf8_buf_count(UTF8_CHARMAP_DATA, sizeof(UTF8_CHARMAP_DATA)) // Compte le nombre de caractères UTF8.
};
if (!upload_font_in_filesystem_to_gpu(
&font_path,
14 /* hauteur en pixels */,
&UTF8_FONT_CHARMAP,
&out_font_glyphs,
&out_font_gpu,
allocator
)
)
{
LOG_ERROR("Failed to load font.");
return 0;
}