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

如何将字符串转为16位大端整数?C#实现NuVotifier遇阻

解决C#中NuVotifier协议16位大端整数处理问题

问题根源分析

你的代码存在两个核心问题,导致不符合协议要求:

  • 0x733A是16位无符号整数,你用Convert.ToInt32转成32位整数后,EndianBitConverter会生成4字节数组,但协议只需要2字节的大端数据。
  • JSON消息长度用long类型处理,会生成8字节数组,同样不符合协议要求的16位长度规范。

修正后的代码(基于EndianBitConverter)

直接使用16位无符号整数类型ushort来处理,确保生成2字节的大端数组:

// 协议要求的16位大端魔术值0x733A,直接用十六进制字面量赋值
ushort magicCode = 0x733A;
byte[] magicBytes = EndianBitConverter.BigEndian.GetBytes(magicCode);

// 将JSON长度转换为16位无符号整数(需确保长度不超过65535,符合协议限制)
ushort jsonLength = (ushort)output.Length;
byte[] lengthBytes = EndianBitConverter.BigEndian.GetBytes(jsonLength);

// 拼接完整消息:魔术值 + 长度 + JSON内容
byte[] fullMessage = magicBytes.Concat(lengthBytes).Concat(Encoding.UTF8.GetBytes(output)).ToArray();

替代方案:手动实现16位大端转换

如果不想依赖第三方NuGet包,可以手动处理字节顺序:

// 手动将ushort转换为大端字节数组
byte[] ToBigEndian(ushort value)
{
    return new byte[] 
    {
        (byte)(value >> 8),  // 高8位
        (byte)(value & 0xFF) // 低8位
    };
}

// 使用示例
byte[] magicBytes = ToBigEndian(0x733A);
byte[] lengthBytes = ToBigEndian((ushort)output.Length);

关键注意事项

  • 必须确保JSON内容的长度不超过ushort的最大值(65535),否则会出现溢出错误,这也是NuVotifier协议的规定。
  • 避免用字符串转整数的方式处理十六进制值,直接用0x733A字面量更高效且不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:01