2010-11-25 4 views

Antwort

13

können Sie verwenden "\x01\x05\x0a\x15"

+6

+1, abgesehen von der Tatsache, dass es eine zusätzliche, abschließende Null hinzugefügt haben wird. – falstro

+0

@roe: Aber da das OP sagt, dass er einen "String" (und nicht ein 'char' Array) will, bedeutet das für mich, dass es einen NUL-Terminator braucht. – jamesdlin

+0

@jamesd; Ich weiß, daher die +1, wollte nur darauf hinweisen, dass es ein zusätzliches 0-Byte hinzufügen wird, so dass sie wahrscheinlich für die meisten Absichten und Zwecke gleichwertig sein werden, aber nicht genau gleich sein werden. – falstro

2

Sie verwenden:

const char *str2 = "\x01\x05\x0A\x15";

Siehe escape sequences auf MSDN (kein neutralere Link finden konnte).

3

Wenn Sie sowohl einen Stringliteral verwenden möchten, und vermeiden hinzugefügt einen zusätzlichen Terminator (NUL-Zeichen) mit, tun Sie es wie folgt aus:

static const char str[4] = "\x1\x5\xa\x15"; 

Wenn die der Stringliteral Länge genau entspricht die angegebene Länge In diesem Zeichenfeld fügt der Compiler das abschließende NUL-Zeichen nicht hinzu.

Das folgende Testprogramm:

#include <stdio.h> 

int main(void) 
{ 
    size_t i; 
    static const char str[4] = "\x1\x5\xa\x15"; 

    printf("str is %zu bytes:\n", sizeof str); 
    for(i = 0; i < sizeof str; ++i) 
    printf("%zu: %02x\n", i, (unsigned int) str[i]); 

    return 0; 
} 

Drucke dieses:

str is 4 bytes: 
0: 01 
1: 05 
2: 0a 
3: 15 

Ich verstehe nicht, warum Sie mit dieser Methode würden es vorziehen, anstatt die viel besser lesbar und wartbar Original mit der Hexadezimalzahlen getrennt durch Kommas, aber vielleicht enthält Ihre echte Zeichenfolge auch normale druckbare Zeichen oder so etwas.

+0

Interessant. Ist das im Standard? – falstro

+0

@row: Ja, absolut. In C++ ist das nicht dasselbe, aber für C ist es Standardverhalten. – unwind

Verwandte Themen