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

如何将Grafana面板查询结果的十进制数值转换为ASCII字符?

解决Grafana中将数值转换为ASCII字符拼接的问题

针对你使用Grafana v10.2.2 + InfluxDB的场景,把数值(如12360=0x3048)转换为对应ASCII字符拼接(如"0H"),可以用以下两种方案:

方案1:在InfluxDB查询阶段直接处理(推荐)

在数据源端完成转换,性能更优,避免Grafana端额外计算。

若使用Flux查询(InfluxDB 2.x)

假设你的字段名为value,修改查询语句,通过map函数拆分字节并转换为ASCII字符串:

from(bucket: "你的桶名")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r._measurement == "你的测量名" and r._field == "value")
  |> map(fn: (r) => ({
      r with
      ascii_str: string(v: uint(v: r._value) >> 8) + string(v: uint(v: r._value) & 0xFF)
    }))

查询结果会新增ascii_str字段,直接显示拼接后的ASCII字符串。

若使用InfluxQL查询(InfluxDB 1.x)

利用CHR()函数将拆分后的字节值转为ASCII字符,再拼接:

SELECT 
  CHR("value" >> 8) || CHR("value" & 0xFF) AS ascii_str
FROM "你的测量名" 
WHERE time >= now() - 1h

value >> 8提取高字节,value & 0xFF提取低字节,CHR()转成对应ASCII字符,||完成拼接。

方案2:在Grafana面板内处理(无需修改查询)

如果无法调整数据源查询,可在Grafana端通过字段格式化或Transform实现:

方法A:自定义字段格式化

  1. 进入面板的Overrides选项卡
  2. 点击Add override,选择需要处理的目标字段(如value)
  3. 找到Field formatting,选择Custom类型
  4. 在Custom formatter输入框中写入JS函数:
(value) => {
  const highByte = (value >> 8) & 0xFF;
  const lowByte = value & 0xFF;
  return String.fromCharCode(highByte) + String.fromCharCode(lowByte);
}

设置完成后,该字段的显示值会自动转换为ASCII拼接字符串。

方法B:通过Transform新增字段

  1. 进入面板的Transform选项卡
  2. 点击Add transformation,选择Add field from calculation
  3. 设置新字段名称(如ASCII字符串)
  4. 在Calculation中选择Custom,输入表达式:
String.fromCharCode((value >> 8) & 0xFF) + String.fromCharCode(value & 0xFF)

注意确保表达式中的value对应你要处理的原字段名,新增的字段会显示转换后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:33:35