Преобразуйте int в шестнадцатеричный формат, а затем в формат 00 00 00 00 - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть целое число, которое увеличивается

Затем я хочу получить это в шестнадцатеричном виде, поэтому выполняю преобразование следующим образом: myInt.ToString("X");

Затем мне нужна строка в формате 00 0000 00 но я не могу найти способ конвертировать шестнадцатеричную строку, которая у меня сейчас есть, в этот формат.

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011

С помощью запроса Linq вы можете сделать это:

string.Join(" ", BitConverter.GetBytes(myInt).Select(x=>x.ToString("x")).ToArray());
1 голос
/ 05 сентября 2011

Fun Mode On Part 1

Я могу использовать Regex es для замены!Wozza !!!

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"
);

Я пишу число в шестнадцатеричном формате 8 цифр с помощью String.Format, а затем вставляю пробелы с помощью Regex.Да, это излишне и бесполезно: -)

Серьезно

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

Взятие фигуры за раз с использованием смен и маски "&&" и составление их с использованием String.Format в шестнадцатеричном формате с отступом 2.

Не используйте их с отрицательными числами, пожалуйста!

Веселый режим для части 2 (Возвращение разгневанного регулярного выражения)

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

Здесь мы ищем группы из 2 шестнадцатеричных цифр, которые не находятся в конце строки, и добавляем пробел после них (мы могли бы использовать \B (не забудьте выйти) вместо(?!$))

0 голосов
/ 05 сентября 2011

Вы можете указать количество шестнадцатеричных цифр, используя число после «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();
}
...