将int转换为十六进制,然后转换为00 00 00的格式

本文关键字:转换 格式 然后 十六进制 int | 更新日期: 2023-09-27 18:07:44

我有一个递增的整数

然后我想要这个十六进制,所以我这样做转换:myInt.ToString("X");

然后我需要一个格式为00 00 00 00的字符串,但我无法找到将我现在拥有的十六进制字符串转换为这种格式的方法。

将int转换为十六进制,然后转换为00 00 00的格式

使用Linq查询,您可以执行以下操作:

string.Join(" ", BitConverter.GetBytes(myInt).Reverse().Select(x=>x.ToString("x")));

第1部分的趣味模式

我可以使用Regex es进行替换!沃扎!!!

string str = Regex.Replace(
    String.Format("{0:X8}", myVal), 
    "([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})", 
    "$1 $2 $3 $4"
);

我用String.Format以8位十六进制格式写数字,然后用Regex插入空格。是的,它是过度使用和无用的:-(

严重

string str = String.Format(
    "{0:X2} {1:X2} {2:X2} {3:X2}", 
    (myVal >> 24) & 0xFF, 
    (myVal >> 16) & 0xFF, 
    (myVal >> 8) & 0xFF, 
    myVal & 0xFF);

使用移位和"&&Mask"一次取一个片段,并使用String.Format以带填充2的十六进制格式编写它们。

请不要用负数!

第二部分的趣味模式(愤怒的Regex的回归(

string str = Regex.Replace(
    String.Format("{0:X8}", myVal), 
    "([0-9A-F]{2})(?!$)", 
    "$1 "
);

在这里,我们搜索不在字符串末尾的2个十六进制数字的组,并在它们后面添加一个空格(我们本可以使用'B(记住转义(而不是(?!$)(

您可以使用'x'(例如'x2'(后面的数字指定十六进制数字的数量。小写的"x"会给你小写的十六进制,反之亦然。

以下方法将是最不浪费的你会发现:

/// <summary>
/// Converts the specified byte array into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="requiredLength">The required length (in bytes) required.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>The binary value.</returns>
static string ToBinaryString(byte[] values, int requiredLength, string delimiter, bool allowLonger)
{
    if (values == null)
        return null;
    if (values.Length > requiredLength)
    {
        if (allowLonger)
            requiredLength = values.Length;
        else
            throw new ArgumentOutOfRangeException("values");
    }
    // Create the StringBuilder with the precise length of values.
    var sb = new StringBuilder((2 + delimiter.Length) * requiredLength - delimiter.Length);
    var padLength = requiredLength - values.Length;
    for (var i = 0; i < padLength; i++)
        sb.Append(sb.Length == 0 ? "" : delimiter)
          .Append("00");
    for (var i = 0; i < values.Length; i++)
        sb.Append(sb.Length == 0 ? "" : delimiter)
          .Append(values[i].ToString("x2"));
    return sb.ToString();
}
/// <summary>
/// Converts the specified byte array into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>
/// The binary value.
/// </returns>
static string ToBinaryString(byte[] values, string delimiter)
{
    return ToBinaryString(values, 0, delimiter, true);
}

编辑:如果您有Int32,则在没有未加密分配的情况下,以下操作将起作用:

/// <summary>
/// Converts the specified <see cref="Int32"/> into a delimited list of hex pairs.
/// </summary>
/// <param name="values">The values.</param>
/// <param name="delimiter">The delimiter.</param>
/// <returns>The binary value.</returns>
static string ToBinaryString(int value, string delimeter)
{
    var u = (uint)IPAddress.HostToNetworkOrder(value);
    var sb = new StringBuilder((2 + delimeter.Length) * 4 - delimeter.Length);
    sb.Append(((u >> 0) & 0xFF).ToString("x2")).Append(delimeter);
    sb.Append(((u >> 8) & 0xFF).ToString("x2")).Append(delimeter);
    sb.Append(((u >> 16) & 0xFF).ToString("x2")).Append(delimeter);
    sb.Append(((u >> 24) & 0xFF).ToString("x2"));
    return sb.ToString();
}