Определение константной строки, содержащей непечатаемый символ в C - PullRequest
8 голосов
/ 25 ноября 2010

Я хочу определить постоянную строку, содержащую непечатаемые символы в C. Например, - скажем, у меня есть строка

char str1[] ={0x01, 0x05, 0x0A, 0x15};

Теперь я хочу определить ее следующим образом

char *str2 = "<??>"

Что я должен написать вместо <??> определить строку, эквивалентную str1?

Ответы [ 3 ]

16 голосов
/ 25 ноября 2010

Вы можете использовать "\x01\x05\x0a\x15"

3 голосов
/ 25 ноября 2010

Если вы хотите использовать как строковый литерал, так и избежать добавления дополнительного терминатора (символа NUL), сделайте это следующим образом:

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

Когда длина строкового литерала точно совпадает с объявленной длиной массива символов, компилятор не добавляет завершающий символ NUL.

Следующая тестовая программа:

#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;
}

Печатает это:

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

Я не понимаю, почему вы бы предпочли использовать этот метод, а не гораздо более читаемый и поддерживаемый оригинальный с шестнадцатеричными числами, разделенными запятыми, но, возможно, ваша настоящая строка также содержит обычные печатаемые символы или что-то в этом роде.

2 голосов
/ 25 ноября 2010

Вы можете использовать:

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

См. escape-последовательности на MSDN (не удалось найти более нейтральную ссылку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...