c++ 获取类的名称
需求 希望获取类的名称. 解决 使用 typeid 即可。 #include <typeinfo.h> std::string getClassName() { return typeid(*this).name(); } 参考 获取类实例的类名(c++)
需求 希望获取类的名称. 解决 使用 typeid 即可。 #include <typeinfo.h> std::string getClassName() { return typeid(*this).name(); } 参考 获取类实例的类名(c++)
需求 如何从 stringstream 中获取多次拼接后的 string, 直接使用 >> 效果并不好. 解决 使用 stringstream 的 str() 这个类函数。 stringstream ss; string s = ""; ss << "123"; ss << "456"; s = ss.str(); 参考 c++ stringstream(老好用了)
需求 在某些情况下,需要打印的数据,16进制表现形式,并且达到固定的位数,不足的左边补零。 解决 snprintf(tmp, sizeof(tmp), "%04X", ack.command); % 格式说明的起始符号 0 空位补0 m.n m指宽度,n指小数精度 X 16进制大写字符 参考 printf()如何进行“左补零”的操作 c语言printf()输出格式大全 C语言printf指定宽度的格式化输出 C语言中sprintf()函数的用法
需求 编程调试的时候,如果用到了消息队列,难免会消息队列中有残余信息的情况,并且如果希望在服务程序结束前就清除这些消息队列,那就需要在 shell 中使用命令进行删除。 解决 消息队列属于 IPC 的一部分,使用的命令也是 IPC 的系列命令中的 ipcrm. 查看消息队列情况 ipcs -q 删除指定 key 的消息队列,一般我们经常用这个,因为 key 一般是我们自己设定的。 ipcrm -Q 1234 删除指定 id 的消息队列 ipcrm -q 1234 如果程序是使用 sudo 来启动的,那么删除的时候,也需要 sudo, 否则没有权限. 参考 ipcs, ipcrm 命令 linux下消息队列的查看与删除(ipcs&ipcrm的使用) 请问Linux下如何清除消息队列queue中的内容??
需求 因为需要在多个进程之间通过消息队列传输数据,所以需要加大消息队列的大小。 解决 首先确定使用的是 System V 还是 POSIX 的消息队列,这两种从 API 到配置都不一样。本文主要提的是 System V 的消息队列。 System V 查看当前系统中的设置 cat /proc/sys/kernel/msgmni cat /proc/sys/kernel/msgmax cat /proc/sys/kernel/msgmnb # 查看当前使用 ipcs -u # 查看限制 ipcs -l 修改配置 System V 的消息队列配置文件是 /etc/sysctl.conf 这个总的配置文件或者 /etc/sysctl.d/ 文件夹下面的细分配置文件。 sudo vim /etc/sysctl.d/11-message-queue.conf # set message queue # set message number of any queue kernel.msgmni = 312 # set one message max size kernel.msgmax = 8192 # set all message totall max size kernel....
需求 使用 matplot 时,当需要多于 10 个的图表显示,使用单窗口多子图的模式,会太小了,看不清楚。所以需要使用多窗口模式,每个窗口只显示有限的子图即可。 解决 其实很简单,只要保证只有一个 show 即可,把所有的窗口全部设置好之后,在最后使用 show, 就可以多个窗口都显示出来了。 for i in range(0, channel_num): fig = plt.figure(num = i, figsize = (4, 4)) ax1 = fig.add_subplot(311) ax1.plot(lists[i][0]) ax2 = fig.add_subplot(312) ax2.plot(lists[i][1]) ax3 = fig.add_subplot(313) ax3.plot(lists[i][2]) #plt.show() plt.show() 参考 Python 多个图同时在不同窗口显示
需求 今天使用 python 编写一个数据处理的脚本时,结果怎么都不对。经过反复调试,问题出现在使用 append 给多维列表添加值的时候,我需要的是只在指定的列表里面添加,结果多维列表的内部多个列表同时被添加值了。 解决 原因 这个错误有点莫名其妙,一开始我以为是我写错了,导致类似于 numpy 里面那样,对多维数组操作时,对高维操作时,会有多个地方被修改。 但是在自己检查之后发现,并不是这种情况。后来经过反复的调试和搜索后,终于确定原因所在。 原因其实还是在新建多维列表的地方,如下是我开始时候的写法: c1 = [] c2 = [] t = [] for i in range(0, 12): l = [c1, c2, t] out_data.append(l) 上面的写法看起来却是是新建了 12 * 3 的多维列表,但是隐藏的问题是,这样添加,其实添加的是 c1, c2, t 的引用,所以导致只要有一个变化了,其他的都会跟着变。 解决 只要修改创建多维列表的方法就可以了,比如这样: out_data = [ [ [] for j in range(3) ] for i in range(channel_num) ] 参考 Python 创建多维空列表 python初始化二维列表:{}.append({}) 与 {{}} * n python 二维列表(数组)赋值问题 python二维列表List修改其中一个数值,所有项数值都改变的问题。
需求 正常在 QTextEdit QTextBrowser 中使用 append 添加新内容,都是自动换行的,如果不希望自动换行怎么办? 解决 其实很简单,使用 insertPlainText 这个方法即可。 textBrowser->insertPlainText("hello "); textBrowser->insertPlainText("world"); insertPlainText接口是在当前光标插入文本(光标一般默认在末尾),不自动换行,所以会打印: hello world 参考 QTextEdit QTextBrowser追加文本不换行
需求 qt 中 qwidget 程序如何 release? 解决 qwidget windeployqt ./appcgm_test_use_ble.exe 缺少的库 qt5 正常,qt6 默认缺少的库有: libgcc_s_seh-1.dll, libstdc++-6.dll, libwinpthread-1.dll. 需要从 qt 的安装目录中找到,然后复制过去即可。需要注意的是,你编译用的是 mingw, 那么你复制的也需要是 mingw 下面的库文件。 参考
需求 在编程使用串口之前,希望先确定串口硬件和系统层面是否正常。 解决 可以使用 stty 来调试串口功能。 查询当前串口配置 sudo stty -aF /dev/ttyS0 上面这个命令可以打印出当前串口的所有配置,有些配置选项前面有 -, 这个表示关闭此选项,或者额外意义,具体可以参考手册 man stty. 需要注意这几个配置: speed, -parenb, cs8, -cstopb, -ixon, -ixoff, -echo. 表示: 波特率,关闭校验,8位,1位停止,无流控,无回显. 保存,读取当前配置 在进行串口配置之前,应该先保存现在配置,便于以后的恢复。 # 保存 sudo stty -gF /dev/ttyS0 > save_stty # 读取 sudo stty -F /dev/ttyS0 $(cat save_stty) 脚本中可以这样写: save_stty="$(stty -g)" ... stty $save_stty 配置串口 sudo stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb -ixon -echo 上面这条命令立即生效,即使已经使用 cat 读取串口数据。 读取数据 sudo cat /dev/ttyS0 *注意: *...