2016-05-06 8 views
0

Ich habe einen spezifischen Anwendungsfall, in dem Zeichenfolgen mit einer benutzerdefinierten Zeichencodierung für diesen Anwendungsfall dargestellt werden müssen. Schriften, etc. sind bereits erledigt, aber ich möchte in der Lage sein, so etwas wie zu geben:Benutzerdefinierte Zeichencodierung in C

static char *test= "Test string"; 

und habe es zu Bytestring äquivalenter sein:

CE D9 E7 E8 00 E7 E8 E6 DD E2 DB FF 

, die keine ist Kodierung irgendwo anders verwendet. Gibt es eine Möglichkeit, GCC mitzuteilen, diese Ausführungscodierung zu verwenden, wenn Strings in der Quelle geschrieben werden?

+0

In C++ können Sie benutzerdefinierte "constexpr" String-Literal-Suffix verwenden. –

+1

Mit C, nicht C++, tut mir leid. –

+1

Sie repräsentieren das Leerzeichen als Nullzeichen? Das wird nicht funktionieren. –

Antwort

2

Zuerst müssen Sie Ihr eigenes iconv-Paket erstellen, das Ihre Codierung unterstützt. Here's how, scrollen Sie nach unten zu "Wie füge ich einen neuen Zeichensatz hinzu?".

Dann können Sie gcc Ihre benutzerdefinierte iconv durch die Einstellung LD_PRELOAD oder was auch immer verwenden.

Dann verwenden Sie -fexec-charset und -fwide-exec-charset gcc Optionen.

Sie müssen möglicherweise auch Ihre eigene libc erstellen. Sie können vielleicht gerade damit anfangen, glibc mit den obigen Optionen neu zu kompilieren. Oder nicht, abhängig davon, wie gut iconv und glibc mit einem "Null" -Terminator umgehen können, der nicht als eine numerische Null kodiert ist. Die Sprache C erfordert '\0' == 0, aber in Ihrer Codierung scheint 0 Platz zu codieren.

+0

guck das nie vorher an. Ist es möglich, einen Null-Terminator-Wert neu zu definieren, der ein spezifisches "iconv" bildet? – LPs

+0

Ich habe keine Ahnung, wie ich das mit meinem seltsamen GCC-Toolkit integrieren kann, aber das scheint sicherlich ein Schritt in die richtige Richtung zu sein. Vielen Dank! –

+1

@LPs nicht wissen, aktualisierte Antwort. –