Ввод пустой строки как представление бита - PullRequest
0 голосов
/ 24 мая 2011

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

Другими словами, входом в C-функцию будет пустая строка, т. Е. "", Теперь я хотел бы знать, как я могу представить пустую строку как 64-битное значение.Это просто последовательность из 64 нулей или я что-то здесь упускаю?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 24 мая 2011

Что такое "C-строка", это массив символов с нулевым элементом;который распадается на указатель на свой первый элемент в большинстве контекстов.Также обычно принимается обратное: указатель на символ (часто) считается указателем на (часть) массива символов, который имеет (последующий) нулевой элемент.

Если вы интерпретируете«пустая строка» как массив из 0 элементов, на самом деле понятия этого нет в языке C.
Если вы интерпретируете «пустую строку» как массив из N элементов, первый элемент которых равен 0, битовое представлениеэтот 1-й элемент является CHAR_BIT двоичными 0 (обычно 8).
Если вы интерпретируете «пустую строку» как указатель на NULL, битовое представление этого указателя определяется реализацией, но сравнение его с 0 должно дать «true".

/* ERRATA: where it says "is a string" please read "can be interpreted as a string" */
char arr_string[10]; /* if any element is 0, this is a string */
char *ptr_string; /* if it points to a valid object accessible as `char`
                  ** and a subsequent valid char is 0, this is a string */

strcpy(arr_string, "foobar"); /* arr_string[6] == 0 */
ptr_string = arr_string;

test_string_empty(arr_string);      /* not empty */
test_string_empty(ptr_string + 6);  /* empty */
test_string_empty(NULL);            /* unknown */
0 голосов
/ 24 мая 2011

Первым символом будет '\ 0', который будет нулевым терминатором. В памяти все еще будет находиться предыдущий символ из того, что был до того, как он был установлен в NULL. Итак, давайте string = Hello World, затем string = \ 0. Память будет выглядеть как '\ 0', 'e', ​​'l', 'l', 'o', '', 'W', 'o', 'r', 'l', 'd', ' !». Так что если вы инициализируете строку в ноль. Сначала это будет символ \ 0, а остальные биты будут установлены в ноль.

0 голосов
/ 24 мая 2011

C символ завершения строки \0 (все биты установлены в ноль).Остальные биты не обязательно всегда будут нулевыми: если строка очищается путем установки ее первого символа в \0, другие символы не изменятся.Последовательность из 64 битов, установленных на ноль, представляет собой one представление пустой строки C.

0 голосов
/ 24 мая 2011

Да, терминатор строки имеет значение 0. 64-битное представление действительно будет 64 нулями.

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