You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS CLI向IoT设备发送十六进制字符串

问题原因

你原有脚本的错误根源是[CHAR]类型转换默认使用UTF-16LE编码生成双字节字符,最终拼接出的payload和你预期的十六进制对应原始字节完全不符,导致Lambda端base64解析后得到乱码。

解决方案

最稳妥的方式是直接将十六进制字符串转换为base64格式后传入AWS CLI,完全规避编码兼容问题,适配Lambda端的原生解析逻辑:

兼容所有PowerShell版本的写法

# 替换为你的十六进制字符串
$hexStr = "C00020000000ff64"
# 十六进制转字节数组
$byteLength = $hexStr.Length / 2
$bytes = [byte[]]::new($byteLength)
for ($i = 0; $i -lt $byteLength; $i++) {
    $bytes[$i] = [Convert]::ToByte($hexStr.Substring($i * 2, 2), 16)
}
# 字节数组转base64
$base64Payload = [Convert]::ToBase64String($bytes)
# 调用AWS IoT发布接口,无需加raw-in-base64-out参数
aws --region <SOME_AWS_REGION> iot-data publish --topic "<TOPIC_ID_HERE>" --payload $base64Payload

PowerShell 7+ 简化写法

如果你的运行环境是PowerShell 7及以上版本,可以直接调用系统内置的十六进制转换方法:

$hexStr = "C00020000000ff64"
$base64Payload = [Convert]::ToBase64String([System.Convert]::FromHexString($hexStr))
aws --region <SOME_AWS_REGION> iot-data publish --topic "<TOPIC_ID_HERE>" --payload $base64Payload

验证方法

你可以本地先验证转换逻辑的正确性:取转换得到的$base64Payload值,在Node.js环境中执行Buffer.from(base64Payload, 'base64').toString('hex'),输出结果和你输入的原始十六进制字符串完全一致即可。

内容的提问来源于stack exchange,提问作者mdhansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:27:00