php pack:数据类型问题和结果验证

2024-03-12

我是 PHP 初学者,我的任务是构建命令,稍后将通过 UDP 发送到设备。运行:OSX、PHP 5.5.3.8 为了创建二进制数据,我使用“pack”。这是我的代码的示例:

<?php
$in_1 = 0x3100;
$in_2 = 0031;
echo "Inputs: " . $in_1 . "\t" . $in_2;
$bin = pack("v*", $in_1, $in_2);
echo "\nlength: ". strlen($bin);
printf ("\npacked result: %x \n",$bin);
printf("HEX result %h\n", $bin);
file_put_contents("ausgabe.log", $bin, FILE_APPEND);
?>

我的终端中的输出是:

Inputs: 12544   25
length: 4
packed result: 0 
HEX result 

我想知道 $in_2 的数字 25。 如果我将 0x0031 分配给 $in_2,结果是 49。 这里出了什么问题?

顺便说一句:我的最终目标是在这样的方案中构建正好 12 个字节的二进制命令(每行中的十进制值作为注释):

function set_routing_item ($in_ch, $out_ch, $on_off, $seq)
{
    $command = toggle_two_bytes(37);    // 37 --> 0x2500
    $status = 0x0000;                   // 0 --> 0x0000
    $pos = 4;                           // 4= route item
    $channel_1 = $in_ch;                // 3
    $channel_2 = $out_ch;               // 6
    $preset_no = 0xff;                  // 255
    $value = $on_off;                   // 33145
    $seq = $seq;                        // 35
    // implement building of command using pack here
}

本例中的结果(十六进制)应如下所示: 25 00 00 00 04 03 06 FF 79 81 23 00

Thanks!


我想出了这个,但它是not最好的方法是,正确的按位运算会更快。

我在用着sprintf%x将值转换为十六进制值的格式说明符。

每个转换规范均由百分号 (%) 组成

你会看到我使用%02x and %04x

  • 0- 用零填充数字左侧
  • 2 or 4- 宽度,要打印的最小字符数。
  • x- 十六进制说明符,使用X为大写。

Code:

<?php
function toggle_two_bytes ($two_bytes)
{
    $two_bytes = $two_bytes & 0xffff;   // limit size to 2 Bytes
    $high = ($two_bytes << 8);          // bit shift
    $low = ($two_bytes >> 8);
    $ret = ($high | $low);              // OR
    $ret = $ret & 0xffff;               // limit (again) to two bytes
    return ($ret);
}


function set_routing_item ($in_ch, $out_ch, $on_off, $seq)
{
    $str  = '';
    $command = toggle_two_bytes(37);
    $str .= sprintf('%04X', $command);

    $status = 0x0000;
    $str .= sprintf('%04X', $status);

    $pos = 4;
    $str .= sprintf('%02X', $pos);

    $str .= sprintf('%02X', $in_ch);

    $str .= sprintf('%02X', $out_ch);

    $preset_no = 0xFF;
    $str .= sprintf('%02X', $preset_no);

    $value = toggle_two_bytes($on_off);
    $str .= sprintf('%04X', $value);

    $seq = toggle_two_bytes($seq);
    $str .= sprintf('%04X', $seq);

    for ($i = 0; $i < strlen($str) - 1; $i += 2) {
      echo $str[$i] . $str[$i+1] . ' ';
    }
}

echo set_routing_item(3, 6, 33145, 35) . PHP_EOL;

Output:

25 00 00 00 04 03 06 FF 79 81 23 00

Demo: https://eval.in/793695 https://eval.in/793695

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php pack:数据类型问题和结果验证 的相关文章

  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • 按通用值对值进行分组:userid 和 ipaddress

    我正在解决数据库中的一个问题 我正在尝试查找使用多个帐户的用户 我有一个用户 ID 和使用的 IP 地址的列表 如下所示 用户 ID IP 地址 1 IP 地址 13 2 IP 地址 23 1 IP 地址 12 4 IP地址56 9 IP
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • Yii2 异常:ApcCache 需要加载 PHP apc 扩展

    在高级模板前端的主配置中配置缓存组件时 我收到异常 在我的 php ini 上启用了扩展 rsults 如何解决此问题 前端 config main php cache gt class gt yii caching ApcCache ke
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 如何将 HTML 转换为 Markdown?

    我有一个类似 stackoverflow 的网站 有一个文本区域 人们可以在其中写答案 我用这个 PHP 库 http parsedown org 转换降价 我的意思是我使用该函数来转换 italic to i italic i inclu
  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐

  • 未捕获的类型错误:无法读取未定义的属性“状态”

    我正在尝试从 React createClass 更改为 React Component 但出现以下错误 Uncaught TypeError Cannot read property state of undefined 我用谷歌搜索了错
  • 实体属性值数据库与严格关系模型电子商务

    可以肯定地说EAV CR http en wikipedia org wiki Entity attribute value model数据库模型不好 也就是说 问题 应该使用什么数据库模型 技术或模式来处理描述可以在运行时更改的电子商务产
  • 如何避免 Angular 中元素重叠

    我的应用程序是基于 Angular 的 我用表格行动态填充页面 页面下方有一个应用程序控制台 该元素的位置似乎是固定的 当我单击添加新行按钮时 新行与应用程序控制台重叠 如何避免这种情况 下面是图片和代码片段 app component h
  • Swift 中的 CGPointMake

    如何使用CGPointMake in Swift 有等效的吗 我收到错误 使用未解析的标识符 CGPointMake 基本上 我试图为 Sprite Kit 节点分配一个位置 但不知道如何在 Swift 中执行此操作 class Playe
  • edmx填充mdf?

    当我在 edmx 文件中 从模型生成数据库 时 它会请求数据源并生成 sql 文件并将数据源添加到 app config 如果我选择 sqlserver 作为源 它工作正常 我可以使用现有数据库或创建一个新数据库 并且表会填充到它并准备使用
  • WP7 - 使用 Application.Resources 中定义的 Storyboard

    In my Application Resources我有以下内容Storyboard定义的
  • 使用具有正斜杠的密钥连接到 s3 接收器时出现无效主机名错误

    我有一个forward slash在 aws 密钥中 当我尝试连接到 s3 接收器时 Caused by java lang IllegalArgumentException Invalid hostname in URI s3 xxxx
  • 脚本不从 .angular-cli.json 加载

    我将新脚本添加到我的 angular cli json 文件中 如下所示 apps root src outDir dist assets assets favicon ico index index html main main ts p
  • 装配 x86-16 中的模式 X,为什么平面 1 未打印,而所有其他平面的顺序不正确?

    我正在 DosBox 0 74 上的 TASM 3 0 中写入 并且我正在尝试写入Mode x https en wikipedia org wiki Mode X 调整了13小时 无束缚模式 13 http www brackeen co
  • 使用 AWS IAM 的临时凭证

    我有一台服务器 它应该向客户端提供临时 AWS 凭证 凭证将使用 HTTPS 传输 客户端应该能够上传和下载 S3 文件 我的担忧如下 我有多个用户仅访问他们自己的目录 Users someUser myfile png 您可以设置策略以一
  • 是否可以在本地计算机和远程集群上运行 OpenMPI?

    我有一组需要在集群中执行的计算操作 可能像 512 个 MPI 进程 现在 我让集群上的根节点打开一个套接字 并在计算操作之间将数据传输到我的本地计算机 但我想知道是否可以只创建两个 MPI 组 其中一个组是我的本地组机和另一个远程集群 并
  • .NET Core SDK未安装或在路径下找不到

    在 VS 2015 下编译 Net Core RC2 项目时 我收到以下错误 GETSDKTOOLINGINFO 错误 NET Core SDK 未安装或 在路径 C Program Files dotnet bin 下找不到 这些 构建和
  • 禁用某些文件名的语法突出显示

    我在 vimrc 中启用了语法突出显示 但这使得加载某些文件太长 所以我需要禁用 或者 准确地说 不启用 启用它然后禁用不是解决方案 这些文件的语法突出显示 我试过 au BufNewFile BufRead inc syntax enab
  • 无尽的 ViewPager android

    假设我的 viewpager 中有两个页面 有什么办法可以从第 2 页移动到第 1 页 但这样做就像用户正在访问第 3 页 带有所有动画 您可以通过使用自定义 FragmentPagerAdapter 来实现此目的 该适配器一遍又一遍地提供
  • 如何确保同一服务器上不同用户的 R 环境一致?

    我正在使用内部软件包 MyPKG 编写可重复分析的协议 每个用户将提供自己的输入文件 除了输入之外 分析应在相同的条件下进行 例如 这样我们就可以推断不同的结果是由于不同的输入文件造成的 MyPKG 正在开发中 所以library MyPK
  • 如何在Python中比较两个有序列表?

    我有两个清单 a 0 2 1 b 0 2 1 我如何比较这两个列表以查看它们是否相等 相同 并且约束它们必须位于same order 我看到过一些问题要求通过对两个列表进行排序来进行比较 但在我的具体情况下 我没有检查排序的比较 而是完全相
  • AlertDialog MultiChoiceItems 侦听器问题

    我目前正在使用 AlertDialog builder 为用户创建多选列表 复选框 这非常有效 只是我们希望其中一个按钮取消选择列表中的所有其他按钮 builder setMultiChoiceItems list checked new
  • 如何有条件地替换集合中的值,例如replaceIf(Predicate)?

    有没有什么简单的方法可以替换 a 中的值列表或集合如果该值为空 我们总能做到list stream filter Objects nonNull 也许可以将 0 添加回列表中 但我正在寻找的是一个像这样的APIlist replaceIf
  • 如何将绘图仪表板应用程序导出到 html 独立文件中以与其他人共享?

    我已经构建了一个交互式仪表板 并且正在寻找一种方法将该应用程序导出为 HTML 格式 并与其他人共享 有什么提示给我吗 我用谷歌搜索过 大多数答案将我转到以下链接 https plot ly python getting started w
  • php pack:数据类型问题和结果验证

    我是 PHP 初学者 我的任务是构建命令 稍后将通过 UDP 发送到设备 运行 OSX PHP 5 5 3 8 为了创建二进制数据 我使用 pack 这是我的代码的示例