ur机械臂30003端口socket通信踩坑(double类型数据怎么解析)
坑的由来
- 都知道在网络通信时要把网络字节序转化为主机字节序才行,但是c++里的标准库函数
ntohl默认是转换32位字节序的数据,也就是说默认是转换float类型的数据; - 而ur机械臂30003端口发送的是double类型的数据,没法直接用
ntohl进行转换。
小贴士
- float是4字节,32位;double是8字节,64位。
- 在网络传输中,数据通常以字节为单位进行编码,这种编码方式被称为网络字节序,它主要用于确保数据在不同主机之间传输时不会受到主机不同字节序的影响。
- 网络字节序采用大端模式,即高位字节在前,低位字节在后。
- 而主机字节序则可能因主机的不同而有所差异,常见的有两种:大端模式和小端模式。小端模式的主机字节序低位字节在前,高位字节在后,与人的直观感受相符。
解决办法
需要自己编写一个函数做这个转换,以下是一种方式:
double ntohd(double netDouble){uint64_t netInt = be64toh(*((uint64_t*)&netDouble));return *((double*)&netInt);
}
逐行解析一下:
uint64_t netInt = be64toh(*((uint64_t*)&netDouble));
这句话做了:
&netDouble: 获取netDouble的内存地址。(uint64_t*)&netDouble: 将该地址强制转换为uint64_t类型的指针。这是为了将双精度浮点数的内存表示视为一个64位的无符号整数。*((uint64_t*)&netDouble): 通过解引用这个指针,我们得到了一个uint64_t类型的值,该值在内存中的表示与netDouble完全相同。be64toh(...): 这是一个库函数,用于将64位的无符号整数从网络字节序(big-endian)转换为主机字节序。
return *((double*)&netInt);
同理,这句话:
-
&netInt: 获取netInt的内存地址。 -
(double*)&netInt: 将该地址强制转换为double类型的指针。这是为了将64位的无符号整数的内存表示视为一个双精度浮点数。 -
*((double*)&netInt): 通过解引用这个指针,我们得到了一个double类型的值,该值在内存中的表示与netInt完全相同。 -
最后,这个值被返回。
附录(ur机械臂30003端口机械臂法兰位姿数据解析)
double x, y, z, rx, ry, rz;char data[1140];int recvLen = recv(socket_, data, 1140, 0);if (recvLen > 0) {memcpy(&x, data+444, sizeof(double));memcpy(&y, data+452, sizeof(double));memcpy(&z, data+460, sizeof(double));memcpy(&rx, data+468, sizeof(double));memcpy(&ry, data+476, sizeof(double));memcpy(&rz, data+484, sizeof(double));x = ntohd(x);y = ntohd(y);z = ntohd(z);rx = ntohd(rx);ry = ntohd(ry);rz = ntohd(rz);
- 上面的代码就是对ur机械臂30003端口机械臂法兰位姿的解析,如果将
ntohd换成dtohl会解析出全是0的错误数据。
相关文章:
ur机械臂30003端口socket通信踩坑(double类型数据怎么解析)
坑的由来 都知道在网络通信时要把网络字节序转化为主机字节序才行,但是c里的标准库函数ntohl默认是转换32位字节序的数据,也就是说默认是转换float类型的数据;而ur机械臂30003端口发送的是double类型的数据,没法直接用ntohl进行转…...
代理IP与Socks5代理的技术奇妙之旅
随着数字化时代的崛起,网络工程师们日益承担着维护网络稳定性和保护数据安全的重任。在这个充满挑战的世界里,代理IP与Socks5代理技术成为了他们的秘密武器,本文将带您踏上一段技术奇妙之旅,深入了解这两项技术在不同领域中的应用…...
自动化测试定位不到元素?可能是 frame 在搞鬼
很多人在用Splinter或Selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,就是定位不到,这种情况很有可能是frame在搞鬼。 说白了就是网站上的网页A,又嵌入了其他网页B。你访问了网页A,在里面可以看到…...
uni-app 开发中,监听 input 键盘事件获取不到按下按键值怎么办?
uniapp 开发 H5 时,无法监听按钮键盘事件的原因以及解决方法。 问题描述: 不少 uni-app 开发者在使用 input 组件时,监听 keyup 事件时,获取不到键盘的 keyCode。编写的代码如下: <template><input keyup&…...
【juc】countdownlatch实现并发网络请求
目录 一、截图示例二、代码示例2.1 测试代码2.2 接口代码 一、截图示例 二、代码示例 2.1 测试代码 package com.learning.countdownlatch;import lombok.extern.slf4j.Slf4j; import org.springframework.web.client.RestTemplate;import java.util.Arrays; import java.uti…...
在供应链管理中,如何做好库存分析?库存分析有哪些监控指标?
在供应链管理中,库存分析是其重要的一环。库存分析的方法繁杂且广泛,选择正确的方法才能更好的进行库存分析,下面就为大家盘点一些常用的库存分析方法和监控指标,全程干货,建议收藏! 01 如何进行库存分析&…...
黑豹程序员-架构师学习路线图-百科:Database数据库
文章目录 1、什么是Database2、发展历史3、数据库排行网4、总结 1、什么是Database 当今世界是一个充满着数据的互联网世界,各处都充斥着大量的数据。即这个互联网世界就是数据世界。 支撑这个数据世界的基石就是数据库,数据库也可以称为数据的仓库。 …...
你相信光吗?黑灯工厂重新相信“光”
你知道“黑灯工厂”吗?望文生义,所谓黑灯工厂,就是可以不需要照明的工厂。全程流水线自动化生产,无人干预、无人值守,工厂变成黑匣子,原材料进去,成品出来,流水线上百分百自动化。 完…...
Ubuntu 20.04使用源码安装nginx 1.14.0
nginx安装及使用(详细版)是一篇参考博文。 http://nginx.org/download/可以选择下载源码的版本。 sudo wget http://nginx.org/download/nginx-1.14.0.tar.gz下载源代码。 sudo tar xzf nginx-1.14.0.tar.gz进行解压。 cd nginx-1.14.0进入到源代码…...
springboot框架拦截器中HttpServletRequest 请求如何区分是图片上传流还是普通的字符流?
在Spring Boot框架中的拦截器(Interceptor)中,可以通过检查Content-Type请求头来区分图片上传流和普通的字符流。 当客户端发送POST请求并携带文件时,Content-Type请求头通常会包含multipart/form-data或者类似的值。这表明该请求…...
简单聊聊 TCP 协议
简单聊聊 TCP 协议 如何实现可靠传输 ?完全可靠存在比特差错存在丢包流水线可靠数据传输协议回退N步 (GBN)选择重传 (ARQ) 小结 TCPTCP 连接报文段结构序号和确认号 可靠数据传输避免重传超时时间加倍快速重传回退N步还是选择重传 流量控制连接管理拥塞控制拥塞原因拥塞控制方…...
钡铼BL124PN:简单快速转换Profinet到Ethernet/IP
钡铼技术BL124PN是一款高性能的Profinet转Ethernet/IP网关设备。该网关专为工业自动化领域设计,用于实现不同协议之间的互连和通信。BL124PN采用可靠稳定的硬件和先进的通信技术,具有以下主要特点: 协议转换能力:BL124PN能够将Pr…...
【golang】go 空结构体 详解 空结构体内容占用及大小
一、空结构体基础 空结构实例 和 空结构体变量 本质是一样的 1、所有空结构体地址都是一样的2、大小都为0(最独特的) package mainimport ("fmt""time""unsafe" )type EST struct { }func main() {// 一、基础// 空结构…...
身为产品经理该如何向客户推广API商品数据接口
在当今数字化的时代,API(Application Programming Interface,应用程序编程接口)已成为各种软件应用程序之间交互数据的主要方式。API商品数据接口作为一种特殊类型的API,能够让不同的系统之间共享商品数据,…...
【数据结构】460. LFU 缓存
460. LFU 缓存 解题思路 get操作 返回key对应的val 然后增加对应的freq插入操作 如果key已经存在 直接进行更新 如果不存在 但是容器已经满了 直接进行删除freq最小的Key 之后进行插入 class LFUCache {// key到 val的映射 KVHashMap<Integer,Integer> keyToVal;// …...
文字转语音播报模块(一):阿里云nls服务使用示例
一、业务场景 最近笔者在业务中涉及到语音告警的模块,需要讲告警内容以文件或流形式返回给前端进行语音播报,具体的分析与处理如下 二、业务分析 首先告警内容提示信息这里做的处理是通过专门字段去存储、编辑,根据拟定好的代码逻辑判断是…...
Vscode配置C#编程环境(win10)
目录 1、安装好Vscode 2、下载安装.NetCore SDK 3、配置C#环境 3.1 打开Vscode并下载扩展 3.2 Vscode中打开文件夹并配置环境 3.3 调试运行 1、安装好Vscode 2、下载安装.NetCore SDK 官网如下,下载完成后双击打开一路走到底就行.NetCore SDK官网 软件显示安…...
python:xlrd 读取 Excel文件,显示在 tkinterTable 表格中
pip install xlrd xlrd-1.2.0-py2.py3-none-any.whl (103 kB) 摘要: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files pip install tkinterTable tkintertable-1.3.3.tar.gz (58 kB) 摘要: Extendable table class for Tkinter 源代…...
深度学习——深度学习计算一
深度学习——深度学习计算一 文章目录 前言一、层和块1.1. 自定义块1.2. 顺序块1.3. 在前向传播函数中执行代码1.4. 小结 二、参数管理2.1. 参数访问2.1.1. 目标参数2.1.2. 一次性访问所有参数2.1.3. 从嵌套块收集参数 2.2. 参数初始化2.2.1. 内置初始化2.2.2. 自定义初始化 2.…...
yolov5及yolov7实战之剪枝
之前有讲过一次yolov5的剪枝:yolov5实战之模型剪枝_yolov5模型剪枝-CSDN博客 当时基于的是比较老的yolov5版本,剪枝对整个训练代码的改动也比较多。最近发现一个比较好用的剪枝库,可以在不怎么改动原有训练代码的情况下,实现剪枝的…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
