惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
Microsoft Security Blog
Microsoft Security Blog
Jina AI
Jina AI
博客园 - 叶小钗
J
Java Code Geeks
博客园 - 聂微东
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
罗磊的独立博客
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
小众软件
小众软件

博客园 - 徐一贺

java读取西门子PLC标签为二进制的时根据标签数据类型传入二进制数组长度的判断。 Windows Server 与 Windows 10/11 官方安装系列号 WPF控件拖拽 从域名到IP地址:nslookup命令带你开启网络之旅 全国DNS服务器地址列举 Win系统端口被占用怎么办?解决方案就在这,速看! 博图VBS连接SQLServer 博图VBS修改SQLServer数据 C# 多点最小二乘法拟合平面算法 ping某个范围的IP地址 Android Studio 2021.3.1 阿里云盘分享地址 将WPF发布为exe安装包 C#中 一个多线程框架 程序员正确使用百度的方式 关于com.google.gson.JsonSyntaxException时间格式解析错误问题 SQL Server 查询数据库表结构 国内加速访问Github的办法,超级简单 全球IP地址查询网站 Halcon2019软件安装教程 转载自:https://blog.csdn.net/cashmood/article/details/105081705 SQL Server 跨服务器视图 idea快速开发插件 比较两个库的表信息
java将读取到的西门子PLC中标签的二进制数组,根据标签数据类...
徐一贺 · 2026-05-08 · via 博客园 - 徐一贺
/**
* 从字节数组解析值
* @param data 字节数组
* @param dataType 数据类型
* @param bitOffset 位偏移
*/
public Object parseValue(byte[] data, String dataType, int bitOffset) {
if (data == null || data.length == 0) return null;

switch (dataType.toUpperCase()) {
case "BOOL":
// 从指定字节的指定位提取布尔值
int byteIndex = bitOffset / 8;
int bitIndex = bitOffset % 8;
if (byteIndex < data.length) {
return (data[byteIndex] & (1 << bitIndex)) != 0;
}
return null;
case "BYTE":
return data[0] & 0xFF;
case "INT":
// 西门子PLC使用大端序
return (short) ((data[0] << 8) | (data[1] & 0xFF));
case "WORD":
return ((data[0] & 0xFF) << 8) | (data[1] & 0xFF);
case "DINT":
return (data[0] << 24) | ((data[1] & 0xFF) << 16) |
((data[2] & 0xFF) << 8) | (data[3] & 0xFF);
case "DWORD":
return ((long) (data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16) |
((data[2] & 0xFF) << 8) | (data[3] & 0xFF);
case "REAL":
case "FLOAT":
int intBits = (data[0] << 24) | ((data[1] & 0xFF) << 16) |
((data[2] & 0xFF) << 8) | (data[3] & 0xFF);
return Float.intBitsToFloat(intBits);
case "LREAL":
case "DOUBLE":
long longBits = ((long) data[0] << 56) | ((long) (data[1] & 0xFF) << 48) |
((long) (data[2] & 0xFF) << 40) | ((long) (data[3] & 0xFF) << 32) |
((long) (data[4] & 0xFF) << 24) | ((data[5] & 0xFF) << 16) |
((data[6] & 0xFF) << 8) | (data[7] & 0xFF);
return Double.longBitsToDouble(longBits);
default:
// 默认作为字节数组返回
return bytesToHex(data);
}
}
/**
* 字节数组转16进制字符串
*/
private String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}

posted @ 2026-05-08 10:19  徐一贺  阅读(7)  评论()    收藏  举报