Я работаю над программой-сокетом (использующей recvfrom
), которая возвращает мне буфер char.Однако полученные данные содержат несколько символов null
, и это не позволяет мне легко обрабатывать их.
Я хотел бы спросить, есть ли способ избежать нулевых символов, если они найдены в середине буфера?
Цель состоит в том, чтобы сохранить двоичные данные в базе данных Cassandra.Я попытался игнорировать нулевые символы и сохранить его непосредственно в БД.Однако он будет хранить только частичную строку.В ходе исследования я узнал, что могу использовать функцию TextAsBlob()
для преобразования полученных данных в блоб.Хотя это ничего не изменило, в БД хранятся только частичные данные (до появления первого нулевого значения).
Итак, мне нужно знать, есть ли способ избежать их?У меня есть длина полученных данных.
Для печати данных я печатаю данные, используя %c
байт за байтом.
Структура таблицы:
cqlsh:network> desc packet;
CREATE TABLE network.packet (
key text PRIMARY KEY,
value blob
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
cqlsh:network>
cqlsh:network> SELECT * from packet;
key | value
------------------------------------------------+--------------------
1234 | 0x70e54c5bfd7f
1235
Ошибка:
cqlsh:network> SELECT blobAsText(value) FROM network.packet WHERE key = '1234' ;
InvalidRequest: Error from server: code=2200 [Invalid query] message="In call to function system.blobastext, value 0x70e54c5bfd7f is not a valid binary representation for type text"
Команда вставки:
char key[5] = 1234;
// value is received from socket.
INSERT INTO network.packet (key, value) VALUES (key, value);