HemersonKl Ответов: 2

C# мне нужно сделать изменение позиции строки.


Здравствуйте, друзья. Мне нужно сделать изменение позиции строки. Таким образом:
Texbo1. text будет иметь такой шестнадцатеричный код.
00 64 00 64 мне нужен этот шестнадцатеричный код, чтобы выглядеть так:
64 00 64 00. Но это всегда будет сделано в нескольких шестнадцатеричных числах, не зависящих от значений.
Поэтому мне нужно, чтобы эти строки всегда менялись таким образом.
В случае, если я использую эту функцию
private void button3_Click(object sender, EventArgs e)
       {
           string s = int.Parse(textBox1.Text).ToString("X4");
           var regex = new Regex(@".{2}");
           string r = regex.Replace(s, "$&" + " ");
           textBox1.Text = (r+r);


       }


Что я уже пробовал:

При вводе примера значения 100 он возвращает то, что я хочу 00 64 00 64, но в неправильном положении. Мне нужно, чтобы позиция была 64 00 64 00.

Ralf Meier

чтобы дать вам соответствующий ответ у меня есть вопрос :
- Dezimal 100 - это Hex 0064 - как вы получаете 00640064 ?
- а для чего тебе все наоборот? Вы должны понимать, что теперь у вас есть строка, а не целое число ...

Если ваш текстовый ввод действительно является целым числом, вы можете преобразовать его в шестнадцатеричную строку и после этого изменить положение частей строки (без регулярных выражений и т. д.Середина, Струна.Правильно, Струна.Слева и создайте новую строку)
Вы заметили, что порядок байтов может снова измениться, если вы введете значения выше 255, 65535,...?
Но заметьте

HemersonKl

Спасибо, друг. это игра, обман шестнадцатеричные коды АОБ

Scan1Aob = "40 01 00 01 00 00 00 00 00 00 00 ?? ?? ?? ?? ФФ ФФ ФФ ФФ"

для этого

Scan1Aob = "40 64 00 64 00 00 00 00 00 00 00 ??" ?? ФФ ФФ ФФ ФФ "

2 Ответов

Рейтинг:
2

OriginalGriff

Я не совсем уверен, что ваши примеры имеют отношение к "100", кроме того, что 100 decimal - это 64 Hex, но почему 100 генерирует два значения "64", я не уверен.

Однако то, что вы, по-видимому, делаете, - это обращаете конечность числа, когда вы преобразуете его в шестнадцатеричную строку. (ПК-с прямым порядком байтов, когда они хранят значения, но инт.ToString возвращает большое конечное значение).
Если целочисленное значение содержит 0x01020304 и вам нужна шестнадцатеричная строка "04 03 02 01", то самый простой способ-использовать BitConverter, чтобы изменить ее на байтовый массив и преобразовать в строку:

int value = 0x01020304;
byte[] bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes));
Array.Reverse(bytes);   //Or the other way ...
Console.WriteLine(BitConverter.ToString(bytes));
Дать вам:
04-03-02-01
01-02-03-04
Если вы хотите удалить дефисы, то это тоже тривиально - вам не нужно регулярное выражение (которое использует кувалду, чтобы расколоть орех):
int value = 0x01020304;
byte[] bytes = BitConverter.GetBytes(value);
Console.WriteLine(BitConverter.ToString(bytes).Replace("-",""));
Array.Reverse(bytes);   //Or the other way ...
Console.WriteLine(BitConverter.ToString(bytes).Replace("-", ""));


Рейтинг:
1

HemersonKl

Спасибо вам всем за помощь. Я получил его с помощью друга.


public static String Inverter(string H)
 {
     String ReturnValue;
     int i;
     ReturnValue = "";
     for (i = H.Length / 2; i >= 1; i -= 1)
     {
         if (i < H.Length / 2)
         {
             ReturnValue = ReturnValue + " ";
         }
         ReturnValue = ReturnValue + H[2 * i - 2] + H[2 * i - 1];
     }
     return ReturnValue;
 }



 private void button3_Click(object sender, EventArgs e)
 {
     string s = int.Parse(textBox1.Text).ToString("X4");
     var regex = new Regex(@".{2}");
     string r = regex.Replace(s, "$&");
     textBox1.Text = (r +r);
     textBox1.Text = Inverter(textBox1.Text);




Этот шестнадцатеричный код предназначен для Чита в игре. В этом случае 4-байтовое значение элемента равно 64, но в игровой памяти это значение должно быть изменено в 2 разных местах инвертировано и продублировано внутри шестнадцатеричной строки. Функция преобразует 100 = 00 64, но мне нужно было сделать 64 00, а затем снова 64 00, получив в конце 64 00 64 00

В случае, если это будет такой hex: string Scan1Aob = "40 01 00 01 00 00 00 00 00 00 00 ?? ?? ?? ?? ФФ ФФ ФФ ФФ"

для этого

Scan1Aob = "40 64 00 64 00 00 00 00 00 00 00 ??" ?? ФФ ФФ ФФ ФФ "