草庐IT

LCD_write_chinese_string

全部标签

c++ - 同步 boost ASIO : Asynchronous write,

我有一个程序(客户端+服务器)可以正常工作:boost::asio::write(this->socket_,boost::asio::buffer(message.substr(count,length_to_send)));哪里socket_是boost::asio::ssl::stream和message是一个std::string.我想让它变得更好和非阻塞,所以我创建了一个可以替代它的函数,它的调用如下:write_async_sync(socket_,message.substr(count,length_to_send));这个函数的目的是:本质上使调用异步保持界面不变我实

c++ - std::shared_ptr<std::string const> 能否作为引用计数不可变字符串的有效实现?

理想情况下,不可变字符串类只需要为每个字符串分配一个内存。甚至引用计数也可以存储在与字符串本身相同的内存块中。string的简单实现和shared_ptr将为shared_ptr分配三block不同的内存:字符串缓冲区的内存字符串对象的内存引用计数的内存现在,我知道在使用std::make_shared()时,智能实现可以将最后两个组合成一个分配。但这仍然会留下两个分配。当您知道字符串是不可变的时,字符串缓冲区将不会被重新分配,因此应该可以将它与字符串对象集成在一起,只留下一次分配。我知道一些字符串实现已经对短字符串使用了这样的优化,但我正在寻找一个不管字符串长度如何都这样做的实现。我

c++ - 将 `hana::string` 转换为 `constexpr const char (&)[]`

我有一些旧代码使用了与str_const非常相似的东西描述here和here做一些constexpr字符串操作。str_const是ScottSchurr描述的文字类型,可以从字符串文字构造,因为它具有来自constchar(&)[]的模板构造函数.我现在也有一些使用boost::hana的新代码.我希望能够参加hana::string并创建一个str_const那是指它。最简单的方法是转换hana::string到constexprconstchar(&)[].(实际上,在这一点上这不是最简单的方法,最简单的方法肯定是在我的str_const实现中添加一个新的模板构造函数。但在这一点

c++ - boost::write_graphviz - 如何水平生成图形

我正在尝试使用BoostGraphLibrary生成一个显示水平图的.dot。创建图表时我的代码如下所示:structVertexP{std::stringtag;};structEdgeP{std::stringsymbol;};structGraphP{std::stringorientation;};typedefboost::adjacency_listGraph;GraphPproperty;property.orientation="LR";Graphgraph(property);//Thenfillthegraph我用来生成.dot文件的代码是这样的:Graphg=cr

具有 4 字节对齐缓冲区的 C++ `std::string` 类容器

我需要一个C++中的数据结构,它的作用类似于标准的字节容器,但将缓冲区对齐为四个字节的倍数。我想尽可能多地重用标准库抽象,而不是滚动我自己的抽象。到目前为止,我一直在使用std::string和std::vector来达到这个目的。不幸的是,我收到了有关最新MacOS的错误报告,显然string::data()不再是4字节对齐的,而是地址与1mod4一致。当我看到这个时,我当然没有意识到规范保证字符串将按4字节对齐。我可以切换到vector,但不幸的是现在我不确定为什么这应该是4字节对齐的。即使使用自定义分配器,vector实现也可能在它分配的缓冲区开始时做一些奇怪的事情。我的问题:从

c++ - std::string 的转换运算符无法处理赋值

我正在使用代理类型来推迟工作,直到将结果分配给一个变量,它通过在代理类型上使用转换运算符来工作。为std::string添加转换运算符重载时,它适用于从代理构建字符串,但无法编译赋值,并显示以下错误消息:error:ambiguousoverloadfor'operator='虽然这个问题与operatorT()notusedinassignment的问题类似,这里的解决方案不适用,因为我也在使用模板化转换运算符。下面是片段:#include#includestructProxy{templateoperatorT(){Tres;std::cerr如何使这个代理与字符串赋值一起工作?

c++ - std::string 的引用计数

我正在查看basic_string的代码(与g++4.2.1捆绑在一起)。复制构造函数使用grab()函数来“抓取”字符串的拷贝(增加其引用计数):_CharT*_M_grab(const_Alloc&__alloc1,const_Alloc&__alloc2){return(!_M_is_leaked()&&__alloc1==__alloc2)?_M_refcopy():_M_clone(__alloc1);}只有当两个字符串的分配器相同时,这才会增加引用计数——这是有道理的。但是,复制构造函数是:basic_string(constbasic_string&__str):_M_d

c++ - 检查 write()/send() 是否可以无阻塞地处理整个缓冲区,否则失败(没有部分写入)

我正在使用SOCK_SEQPACKET连接,确保通过单个write()/send()调用发送整个缓冲区对我来说至关重要。我还在使用旨在通过一次调用处理完整数据block的设备驱动程序。同时,我想处理write()/send()由于缓冲区溢出而阻塞的情况,即我想反馈当前实现是否在这里遇到瓶颈。我正在使用glibc,Linux2.6。我需要实现一个接受缓冲区的方法,它要么完全发送一个缓冲区,要么指示由于阻塞导致的失败(即系统缓冲区溢出)。看起来使用send(...,MSG_DONTWAIT)/fcntl(...,O_NONBLOCK)不是解决方案,因为它们在报告EWOULDBLOCK/EA

c++ - 卡住在 __write_nocancel

所以我有一个非常重要的程序,偶尔会卡住。该程序使用Qt、开放场景图和谷歌日志记录。这种卡住发生在谷歌日志中的打印中间。该程序本身正在打印大量调试信息。我能够通过gdb-server连接到程序,这是堆栈跟踪:#00x000000397ac0e030in__write_nocancel()at../sysdeps/unix/syscall-template.S:82#10x00007f5eecb74aebingoogle::LogMessage::SendToLog()()from/lib64/libglog.so.0#20x00007f5eecb71fc7ingoogle::LogMes

c++ - 如何*正确*地将 std::string 转换为无符号 char[] 数组。我想我做错了,有人指出我正确的方向吗?

我目前正在对网络协议(protocol)进行逆向工程,并且我编写了一个小型解密协议(protocol)。我曾经将数据包的字节定义为一个无符号字符数组,如下所示:unsignedcharbuff[]="\x00\xFF\x0A"etc.为了不对每个数据包多次重新编译程序,我制作了一个小型GUI工具,它可以从字符串中获取\xFF表示法中的字节。我通过以下方式做到了这一点:intlength=int(stencString.length());unsignedchar*buff=newunsignedchar[length+1];memcpy(buff,stencString.c_str()