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

如何在C#中实现Python to_bytes方法的同等编码效果

C# 实现Python to_bytes 等效功能的方案

你需要的是将整数按指定长度、指定字节序转为字节数组,和Python (72).to_bytes(SIZEOF_INT,'little') 返回的b'H\x00\x00\x00'完全一致,可按以下方式实现:


1. 核心字节数组转换实现

首先实现通用的整数转字节数组扩展方法,完全对齐Python to_bytes 的字节序、长度适配逻辑:

using System;
using System.Linq;

public static class IntByteExtensions
{
    /// <summary>
    /// 等效Python int.to_bytes(length, byteorder) 方法
    /// </summary>
    /// <param name="value">待转换的整数</param>
    /// <param name="length">输出字节数组的长度</param>
    /// <param name="isLittleEndian">是否使用小端字节序</param>
    /// <returns>转换后的字节数组</returns>
    public static byte[] ToBytes(this int value, int length, bool isLittleEndian)
    {
        byte[] rawBytes = BitConverter.GetBytes(value);
        
        // 适配目标字节序
        if (BitConverter.IsLittleEndian != isLittleEndian)
        {
            Array.Reverse(rawBytes);
        }

        // 截取指定长度,对齐Python截断低位/高位的逻辑
        return isLittleEndian 
            ? rawBytes.Take(length).ToArray() 
            : rawBytes.Skip(rawBytes.Length - length).Take(length).ToArray();
    }
}

调用示例(对应你给出的Python场景)

const int SIZEOF_INT = 4;
byte[] result = 72.ToBytes(SIZEOF_INT, isLittleEndian: true);
// result 内容为 [0x48, 0x00, 0x00, 0x00],和Python返回的字节数组完全一致

2. 可选:输出Python风格的bytes字面量字符串

如果需要得到和Python打印输出完全一致的b'H\x00\x00\x00'格式的字符串,可以额外加格式化方法:

using System.Text;

public static class ByteFormatExtensions
{
    public static string ToPythonBytesLiteral(this byte[] bytes)
    {
        StringBuilder sb = new StringBuilder("b'");
        foreach (byte b in bytes)
        {
            // 可打印ASCII字符直接输出,不可打印字符转为\x十六进制格式
            if (b is >= 32 and <= 126)
            {
                sb.Append((char)b);
            }
            else
            {
                sb.Append($"\\x{b:X2}".ToLower());
            }
        }
        sb.Append("'");
        return sb.ToString();
    }
}

调用示例

Console.WriteLine(result.ToPythonBytesLiteral());
// 输出结果:b'H\x00\x00\x00'

注意事项

  • 如果需要处理无符号整数、long等其他数值类型,只需修改扩展方法的入参类型即可,逻辑通用
  • 若要完全对齐Python的溢出校验逻辑,可以在扩展方法中增加数值范围校验:当指定长度无法容纳当前数值时抛出OverflowException
  • 当指定长度大于数值实际所需字节数时,方法会自动补0,和Python行为一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:54:03