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

求Node.js中Buffer.from与位运算逻辑的C#等价实现方案

Node.js位运算逻辑的C#等价实现

问题核心

需要将一段Node.js中基于bitwise库的位运算逻辑转成C#代码,要求最终输出与Node.js的out2完全一致。之前用Encoding.UTF8.GetBytes转字符串为字节数组时结果不符,核心原因是没复现bitwise.buffer.or/xor的循环补位逻辑。

关键逻辑说明

Node.js中的Buffer.from(str)本质是将字符串按UTF-8编码转为字节数组(示例中所有字符均为ASCII范围,UTF-8与ASCII编码结果一致)。而bitwise库的位运算规则是:

  • 对两个字节数组按逐字节位运算
  • 若两个数组长度不同,会循环复用较短数组的字节,直到长度与较长数组匹配

C#实现代码

using System;
using System.Text;

public class BitwiseOperations
{
    // 实现bitwise.buffer.or的逻辑:逐字节OR,短数组循环补位
    public static byte[] BufferOr(byte[] longer, byte[] shorter)
    {
        byte[] result = new byte[longer.Length];
        for (int i = 0; i < longer.Length; i++)
        {
            result[i] = (byte)(longer[i] | shorter[i % shorter.Length]);
        }
        return result;
    }

    // 实现bitwise.buffer.xor的逻辑:逐字节XOR,短数组循环补位
    public static byte[] BufferXor(byte[] longer, byte[] shorter)
    {
        byte[] result = new byte[longer.Length];
        for (int i = 0; i < longer.Length; i++)
        {
            result[i] = (byte)(longer[i] ^ shorter[i % shorter.Length]);
        }
        return result;
    }

    public static void Main()
    {
        string testkey = "gEracj9I248GF3yS";
        string timestamp = "1649302201249";
        string testid = "8621349";

        // 转UTF-8字节数组,与Node.js Buffer.from结果一致
        byte[] testkeyBuffer = Encoding.UTF8.GetBytes(testkey);
        byte[] timestampBuffer = Encoding.UTF8.GetBytes(timestamp);
        byte[] testidBuffer = Encoding.UTF8.GetBytes(testid);

        // 执行OR运算,testkeyBuffer更长(16字节),timestampBuffer(13字节)循环补位
        byte[] out1 = BufferOr(testkeyBuffer, timestampBuffer);
        // 执行XOR运算,out1(16字节),testidBuffer(7字节)循环补位
        byte[] out2 = BufferXor(out1, testidBuffer);

        // 将结果转为字符串(与Node.js输出一致,包含不可见字符)
        string out2Str = Encoding.UTF8.GetString(out2);
        Console.WriteLine(out2Str); // 输出应为:OADH@N☻{25:w⌂3yS
    }
}

验证说明

  • Encoding.UTF8.GetBytes与Buffer.from的编码结果完全一致(示例字符均为ASCII,无多字节字符)
  • BufferOr和BufferXor严格复现了bitwise库的循环补位逻辑,确保位运算结果与Node.js端一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:21