char缓冲区

9w11ddsr  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(569)

我正在开发一个套接字程序(使用 recvfrom )返回一个字符缓冲区。但是,接收到的数据包含多个 null 字符和它不让我后处理它容易。
我想问,如果在缓冲区的中间发现空字符,是否有任何方法可以转义它们?
目标是将二进制数据存储到cassandra数据库中。我试图忽略空字符并将其直接存储到数据库中。但是,它只存储部分字符串。经过研究,我知道我可以 TextAsBlob() 函数将接收到的数据转换为blob。尽管这并没有改变任何东西,但数据库中只存储了部分数据(直到第一个空值出现)。
所以,我想知道有没有办法逃脱他们?我有可用的接收数据的长度。
为了打印数据,我正在使用 %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);
unftdfkk

unftdfkk1#

你是说这些数据不应该被称为文本,然后你使用 TextToBlob() 去储存它。 TextToBlob() 将数据引用为文本(并尝试将其存储为二进制数据),但这正是您不想要的。因为如果它被称为文本,那么每0就意味着字符串终止。
您希望存储由接收的数据 recvfrom 在指向某个数据结构的指针中,或者只是一个 void * . 否则,每个字节 null (0)将被称为字符串的结尾。
因此,您应该按照您所说的大小分配一些内存,然后不使用任何字符串(char数组)函数将所有这些数据读取到此地址。

相关问题