当前位置: 首页 > news >正文

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 时&#xff0c;无法监听按钮键盘事件的原因以及解决方法。 问题描述&#xff1a; 不少 uni-app 开发者在使用 input 组件时&#xff0c;监听 keyup 事件时&#xff0c;获取不到键盘的 keyCode。编写的代码如下&#xff1a; <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…...

在供应链管理中,如何做好库存分析?库存分析有哪些监控指标?

在供应链管理中&#xff0c;库存分析是其重要的一环。库存分析的方法繁杂且广泛&#xff0c;选择正确的方法才能更好的进行库存分析&#xff0c;下面就为大家盘点一些常用的库存分析方法和监控指标&#xff0c;全程干货&#xff0c;建议收藏&#xff01; 01 如何进行库存分析&…...

黑豹程序员-架构师学习路线图-百科:Database数据库

文章目录 1、什么是Database2、发展历史3、数据库排行网4、总结 1、什么是Database 当今世界是一个充满着数据的互联网世界&#xff0c;各处都充斥着大量的数据。即这个互联网世界就是数据世界。 支撑这个数据世界的基石就是数据库&#xff0c;数据库也可以称为数据的仓库。 …...

你相信光吗?黑灯工厂重新相信“光”

你知道“黑灯工厂”吗&#xff1f;望文生义&#xff0c;所谓黑灯工厂&#xff0c;就是可以不需要照明的工厂。全程流水线自动化生产&#xff0c;无人干预、无人值守&#xff0c;工厂变成黑匣子&#xff0c;原材料进去&#xff0c;成品出来&#xff0c;流水线上百分百自动化。 完…...

Ubuntu 20.04使用源码安装nginx 1.14.0

nginx安装及使用&#xff08;详细版&#xff09;是一篇参考博文。 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框架中的拦截器&#xff08;Interceptor&#xff09;中&#xff0c;可以通过检查Content-Type请求头来区分图片上传流和普通的字符流。 当客户端发送POST请求并携带文件时&#xff0c;Content-Type请求头通常会包含multipart/form-data或者类似的值。这表明该请求…...

简单聊聊 TCP 协议

简单聊聊 TCP 协议 如何实现可靠传输 ?完全可靠存在比特差错存在丢包流水线可靠数据传输协议回退N步 (GBN)选择重传 (ARQ) 小结 TCPTCP 连接报文段结构序号和确认号 可靠数据传输避免重传超时时间加倍快速重传回退N步还是选择重传 流量控制连接管理拥塞控制拥塞原因拥塞控制方…...

钡铼BL124PN:简单快速转换Profinet到Ethernet/IP

钡铼技术BL124PN是一款高性能的Profinet转Ethernet/IP网关设备。该网关专为工业自动化领域设计&#xff0c;用于实现不同协议之间的互连和通信。BL124PN采用可靠稳定的硬件和先进的通信技术&#xff0c;具有以下主要特点&#xff1a; 协议转换能力&#xff1a;BL124PN能够将Pr…...

【golang】go 空结构体 详解 空结构体内容占用及大小

一、空结构体基础 空结构实例 和 空结构体变量 本质是一样的 1、所有空结构体地址都是一样的2、大小都为0&#xff08;最独特的&#xff09; package mainimport ("fmt""time""unsafe" )type EST struct { }func main() {// 一、基础// 空结构…...

身为产品经理该如何向客户推广API商品数据接口

在当今数字化的时代&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;已成为各种软件应用程序之间交互数据的主要方式。API商品数据接口作为一种特殊类型的API&#xff0c;能够让不同的系统之间共享商品数据&#xff0c;…...

【数据结构】460. LFU 缓存

460. LFU 缓存 解题思路 get操作 返回key对应的val 然后增加对应的freq插入操作 如果key已经存在 直接进行更新 如果不存在 但是容器已经满了 直接进行删除freq最小的Key 之后进行插入 class LFUCache {// key到 val的映射 KVHashMap<Integer,Integer> keyToVal;// …...

文字转语音播报模块(一):阿里云nls服务使用示例

一、业务场景 最近笔者在业务中涉及到语音告警的模块&#xff0c;需要讲告警内容以文件或流形式返回给前端进行语音播报&#xff0c;具体的分析与处理如下 二、业务分析 首先告警内容提示信息这里做的处理是通过专门字段去存储、编辑&#xff0c;根据拟定好的代码逻辑判断是…...

Vscode配置C#编程环境(win10)

目录 1、安装好Vscode 2、下载安装.NetCore SDK 3、配置C#环境 3.1 打开Vscode并下载扩展 3.2 Vscode中打开文件夹并配置环境 3.3 调试运行 1、安装好Vscode 2、下载安装.NetCore SDK 官网如下&#xff0c;下载完成后双击打开一路走到底就行.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的剪枝&#xff1a;yolov5实战之模型剪枝_yolov5模型剪枝-CSDN博客 当时基于的是比较老的yolov5版本&#xff0c;剪枝对整个训练代码的改动也比较多。最近发现一个比较好用的剪枝库&#xff0c;可以在不怎么改动原有训练代码的情况下&#xff0c;实现剪枝的…...

OWL ADVENTURE Java面试题实战:手写一个简单的图像加载器

OWL ADVENTURE Java面试题实战&#xff1a;手写一个简单的图像加载器 最近在准备Java面试的朋友&#xff0c;是不是经常被问到IO、多线程这些基础&#xff1f;光背八股文总觉得心里没底。今天咱们换个玩法&#xff0c;不搞虚的&#xff0c;直接动手写一个能用在真实项目里的东…...

ESP32轻量级18650电池电量估算库设计与实现

1. 项目概述Battery_18650_Stats是一款专为 ESP32 平台设计的轻量级嵌入式电池状态计算库&#xff0c;核心目标是在 Arduino IDE 环境下&#xff0c;以最小资源开销、最高工程鲁棒性&#xff0c;实现对单节 18650 锂离子电池&#xff08;Li-ion&#xff09;荷电状态&#xff08…...

开源电子书工具:如何用鸿蒙系统打造专属个性化阅读空间

开源电子书工具&#xff1a;如何用鸿蒙系统打造专属个性化阅读空间 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否曾因阅读应用充斥广告而烦躁&#xff1f;是否渴望完全掌控自己的阅读体验&am…...

Pyodide vs Rust-Python vs WASI-NN:Python WASM性能终极对决(含13项微基准测试原始数据)

第一章&#xff1a;Pyodide vs Rust-Python vs WASI-NN&#xff1a;Python WASM性能终极对决&#xff08;含13项微基准测试原始数据&#xff09; WebAssembly 正在重塑 Python 在浏览器与边缘环境中的执行范式。本章基于统一测试平台&#xff08;WASI SDK 20.0、Chrome 124、In…...

ESP32硬件定时器虚拟化:16路ISR定时器实现原理与工程实践

1. ESP32_New_TimerInterrupt 库深度解析&#xff1a;16路高精度硬件定时器中断的工程实践1.1 为什么嵌入式系统迫切需要此库在ESP32系列微控制器的实际工程开发中&#xff0c;硬件定时器资源极其稀缺且关键。标准ESP32芯片仅配备两组定时器组&#xff08;Timer Group 0/1&…...

OpenClaw操作录制:ollama-QwQ-32B学习人工流程生成自动化脚本

OpenClaw操作录制&#xff1a;ollama-QwQ-32B学习人工流程生成自动化脚本 1. 为什么需要操作录制功能 上周我在整理月度运营报告时&#xff0c;突然意识到自己正在重复第7次执行完全相同的操作流程&#xff1a;打开三个数据源表格→复制特定列→粘贴到汇总表→生成折线图→导…...

宁波小程序公司提供专业的小程序开发服务

在宁波小程序公司的服务中&#xff0c;我们致力于为客户提供清晰的内容结构和流畅的表达。我们通过深入的需求分析&#xff0c;确保每个项目都能符合客户特定的期望和市场需求。设计阶段注重市场调研&#xff0c;力求在视觉和功能上都能满足用户的使用习惯和偏好。开发过程中&a…...

MoMask终极指南:5分钟学会AI生成3D人体运动动画

MoMask终极指南&#xff1a;5分钟学会AI生成3D人体运动动画 【免费下载链接】momask-codes Official implementation of "MoMask: Generative Masked Modeling of 3D Human Motions (CVPR2024)" 项目地址: https://gitcode.com/gh_mirrors/mo/momask-codes 想…...

别再死记硬背PCA公式了!用Python+Open3D实战点云法向量估计(附代码)

用Python实战点云法向量估计&#xff1a;从数学原理到Open3D实现 点云处理是计算机视觉和三维重建中的基础任务&#xff0c;而法向量估计则是理解点云局部几何特征的关键步骤。传统教学中&#xff0c;PCA&#xff08;主成分分析&#xff09;往往被简化为一堆数学公式&#xff…...

4个步骤掌握高频交易策略:High-Frequency-Trading-Model-with-IB实战指南

4个步骤掌握高频交易策略&#xff1a;High-Frequency-Trading-Model-with-IB实战指南 【免费下载链接】High-Frequency-Trading-Model-with-IB A high-frequency trading model using Interactive Brokers API with pairs and mean-reversion in Python 项目地址: https://gi…...