«Я хочу скопировать бит в char в uint64_t».
Попытка с помощью memcpy:
void * memcpy(void * dst, const void * src, size_t n)
например,
memcpy(blocks, word, strlen(word));
Более одной строки
Что касается вашего комментария, который я истолковать быть о копировании более одной строки:
memcpy
копирует n
байт из src
в dst
, так что если мы хотим скопировать несколько строк подряд, мы должны убедиться, что звонки на memcpy
есть src
set t o конец последней строки, которую мы скопировали, предполагая, что мы хотим скопировать «привет», а затем «мир» в blocks
, и в итоге получим байты, представляющие «helloworld».
// if you have a char** words and uint64_t blocks[64]; or similar
uint64_t blocks[64];
const char *words[2] = { "hello", "world" };
size_t offset = 0, len;
int num_words = sizeof words/sizeof words[0], n;
for (n = 0; n < num_words && offset < sizeof blocks; ++n) {
len = strlen(words[n]);
memcpy(((void *)blocks) + offset, words[n], len); // note the void * cast
offset += len;
}
Это должно быть легко адаптироваться к ситуации, когда вы читаете в строках, а не имея массив символьного массива.
Получение строки обратно
принять blocks
и получить char *
со всеми байтами в нем, мы должны помнить, что строки в C являются нулем, поэтому если мы хотим лечить результат в виде строки, ему нужно иметь нуль в конце. Последним offset
, который у вас есть после завершения копирования (сверху), можно было бы добавить это.
char new_word[100];
memcpy(new_word, blocks, sizeof new_word);
new_word[offset] = 0;
Мы не должны копировать данные, чтобы рассматривать это как char *
, кстати; Мы могли бы просто бросить ...
char * new_word = (char *)blocks;
... но помните, что если вы сделаете это, изменяя new_word
также модифицировать blocks
.
Как насчет 'memcpy (blocks, word, strlen (word))'? – ooga
Мне нужны они в битовой форме, например 00100101 – Kinghill
'blocks [0] | = !! word [e] >> 8;' Как вы думаете, что это делает? Я не уверен, каков ваш ожидаемый результат. Весь цикл можно свести только к последней итерации. И как это связано с битовыми картами. @ _ @. – luk32