gpt4 book ai didi

具有多个空字符的字符缓冲区

转载 作者:行者123 更新时间:2023-11-30 16:17:03 25 4
gpt4 key购买 nike

我正在开发一个套接字程序(使用recvfrom),它返回一个字符缓冲区。然而,接收到的数据包含多个 null 字符,它不允许我轻松地对其进行后期处理。

我想询问如果在缓冲区中间发现空字符,是否有任何方法可以转义它们?

目标是将二进制数据存储到 cassandra DB 中。我尝试忽略空字符并将其直接存储到数据库中。但是它只会存储部分字符串。经过研究,我了解到可以使用 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);

最佳答案

您说这些数据不应被称为文本,然后您使用 TextToBlob() 来存储它。 TextToBlob() 会将您的数据引用为文本(并尝试将其存储为二进制数据),但这正是您不想要的。因为如果它被称为文本,每个 0 就意味着字符串终止。

您希望将 recvfrom 接收到的数据存储在指向某些数据结构的指针中,或者可能只是一个 void * 中。否则,每个 null (0) 的字节将被称为字符串结尾。

因此,您应该按照您所说的知道的大小分配一些内存,然后将所有这些数据读取到该地址,而不使用任何字符串(字符数组)函数。

关于具有多个空字符的字符缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com