【问题标题】:C# Convert Int To Two Hex Bytes?C# 将 Int 转换为两个十六进制字节?
【发布时间】:2012-08-08 13:59:26
【问题描述】:

我有一个整数需要转换为四位十六进制值。

例如,假设 int 值为 16。我正在寻找的是一种从 16 到 0x00 0x10。

任何建议将不胜感激!!!

【问题讨论】:

  • 你的意思是你想要 int 的十六进制字符串表示?
  • 我所知道的就是这个....给定一个整数 16 我需要产生 2 个字节。第一个字节值为 0x00,第二个字节值为 0x10。最终结果为 0000 0000 0001 0000 = 16。我的程序需要将结果切碎。换句话说,取前 8 位显示为 0x00,然后取后 8 位显示为 0x10。总之,我需要从 16 -> 0x00 0x10 开始。
  • 一个 int 是 32 位,所以你需要 4 个字节(8 个十六进制数字)来表示所有可能的值...

标签: c# hex


【解决方案1】:

试试这个:

var input = 16;

var bytes = new byte[2];
bytes[0] = (byte)(input >> 8);  // 0x00
bytes[1] = (byte)input;         // 0x10

var result = (bytes[0] << 8)
           | bytes[1];

// result == 16

【讨论】:

    【解决方案2】:

    这里有一个正则表达式,只是为了好玩:

    Regex.Replace(number.ToString("X4"), "..", "0x$0 ").TrimEnd();
    

    【讨论】:

    • 如果我一个人这样做,第二个字节不会得到前缀。但是,是的,您可能也可以制作一个更复杂的正则表达式来处理这个问题。
    【解决方案3】:

    另外,一个更通用的解决方案是通过字节数组来完成(然后你可以将它用于字符串或其他数据类型)

    public static string ByteArrayToString(byte[] ba)
    {
       string hex = BitConverter.ToString(ba);
       return hex.Replace("-","");
    }
    
    int i = 39;
    string str = "ssifm";
    long l = 93823;
    
    string hexi = ByteArrayToString(BitConverter.GetBytes(i));
    string hexstr = ByteArrayToString(Encoding.Ascii.GetBytes(str));
    string hexl = ByteArrayToString(BitConverter.GetBytes(l));
    

    这会以“FF”格式返回它们,您可以自己添加“0x”,方法是在 ToString() 之后添加它:

    return "0x"+hex.Replace("-", " 0x");
    

    【讨论】:

    • 我不想要一个字符串......我拥有的是一个数组。数组中有两个位置需要存储值 16。数组的第一个位置需要 0x00,第二个位置需要 0x01。请注意,这些不是字符串,存储在数组中的实际上是字节,因此您也可以将其视为 array[0]=0 和 array[1]=10
    • @TackyTacky:如果你需要一个数组,BitConverter(或者如果你只需要两个就换)更合适,十六进制无关紧要。
    【解决方案4】:

    转移它!蒙面!蒙面! string.Format它!

    int n = 16;
    string.Format("0x{0:x2} 0x{1:x2}", (n & 0xff00) >> 8, n & 0xff); // 0x00 0x10
    

    Here's a demo.

    x2 格式说明符表示 2 位十六进制值。


    好的,显然你只需要两个字节。十六进制在这里不相关。

    byte lowByte = (byte)(n & 0xff);
    byte highByte = (byte)(n >> 8 & 0xff);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2017-03-05
      • 2011-09-21
      相关资源
      最近更新 更多