返回信息流上图,先按照十六进制打印字符串,再将获得的十六进制数拼成新的字符数组,再将字符数组转成字符串后发现字符串长度不一致了。这是由于什么原因导致的,该如何解决。
这是一条镜像帖。来源:北邮人论坛 / cpp / #100266同步于 2020/8/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
十六进制char数组转string后字符长度不一致
justlikeu
2020/8/18镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
解决了,谢谢
【 在 a912655391 的大作中提到: 】
: 应该是string的拷贝构造函数以char*类型的变量为参数时,会依次读取字符,知道遇到\0才停止读取,可以在buf最后面加个\0
: --
: ............
string里存的真实数据里并没有\0,string是basic_string<char>模板类的一个typedef,可以类似于一个class,它的长度是用单独的变量控制的,并不是通过\0判断的。
接受到的数据流里面不包含0,如何转成同样大小的string呢
【 在 flyfree 的大作中提到: 】
: string里存的真实数据里并没有\0,string是basic_string<char>模板类的一个typedef,可以类似于一个class,它的长度是用单独的变量控制的,并不是通过\0判断的。
: --
: ............
啥意思,数据流是啥类型的?string类型还是const char*类型。具体的可以去www.cplusplus.com或者www.cppreference.com查一下string的相关接口,没太理解你到底想干啥。但是我觉得大多数,string的各种类型的构造函数,insert,assign等函数或者百度字符串拼接等,都有现成的库函数完成。
【 在 justlikeu 的大作中提到: 】
: 接受到的数据流里面不包含0,如何转成同样大小的string呢
: ............
一般都是用string::assign(char*, size_t n)来将char* 转成 string,这种方法防止了下面的情况;
1. char* 中数据中间有\0, 如果强制复制默认会截断;
2. 只想将部分char*中的内容复制给string
【 在 justlikeu 的大作中提到: 】
: 接受到的数据流里面不包含0,如何转成同样大小的string呢