2016-09-07 2 views
-3

я прочитал байт и отображать их в текстовом поле с этим:Чтение байтов в массив, то XOR результат в строку

BinaryReader br = new BinaryReader(File.OpenRead(path)); 
br.BaseStream.Position = 0x1D; 
textBox1.Text = br.ReadInt32().ToString("X"); 
br.Dispose(); 

мне нужно прочитать 4 байта, то XOR каждый со значением 149 и печать результаты выводятся в текстовое поле. Текстовое поле, кажется, только для отображения «System.Byte()»

Я пробовал этот код, но там было много ошибок, например, не будучи в состоянии преобразовать байт в междунар:

BinaryReader br = new BinaryReader(File.OpenRead(path)); 
br.BaseStream.Position = 0x3E8; 
byte[] buffer = br.ReadBytes(4); 
int i = 149; 

Вывод должен выглядеть следующим образом:

result = buffer[0]^149; 
result2 = buffer[1]^149; 
result3 = buffer[2]^149; 
result4 = buffer[3]^149; 

Как я могу добиться этого?

+0

Просто из любопытства. Что такое xoring? – AVK

+0

Пожалуйста, разместите код, который вы пробовали. –

+4

@AVKNaidu Он, вероятно, означает [^] (https://msdn.microsoft.com/en-us/library/zkacc7k1.aspx) –

ответ

1

Добро пожаловать на переполнение стека, земли, где мечты сбываются. Так как это ваш первый вопрос, я сделаю все возможное, чтобы ответить, но в будущем, старайтесь следовать принципам сообщества в основном показывают, что

  1. Вы пытались решить эту проблему самостоятельно,
  2. Опубликовать весь код что применимо к вашей проблеме, и
  3. Явное сказать, почему код вы отправили не делать то, что вы хотели бы это сделать

в качестве примечания, проверьте dotnetfiddle.net, если вы хотите сделать небольшие программы для быстрого тестирования. Pro совет: не использовать Excel для отладки C# программ;)

Ответ: Daily Double

ОК, я собираюсь сделать вывод о том, что ваш вопрос заключается в следующем. Довольно либеральное перефразирование я знаю, но я пытаюсь помочь вам здесь

[Как я могу читать 4 байта из файла в заданном файл смещения, XOR каждый из этих 4 байта с 0x149, а затем отобразить тот на экране?]

ОК, первое место для начала - получить FileStream объект, который я думаю. More reading: what is using?

using (var input = File.OpenRead(path)) 
{ 
    // somehow seek to file offset 
    // read 4 bytes, and 
    // XOR each byte with 0x149 
    // store results in a List<byte> (or something) 
} 

// display result 

Хорошо, искать файл, вам нужно input.Seek(0x1D, SeekOrigin.Begin); (Предполагается, что 0x1D из ОП правильно).

Чтобы прочитать 4 байта, это сделать (см ReadByte() документацию)

for (var i=0;i<4;i++){ 
    var byteThatIsNotRemembered = input.ReadByte(); 
} 

Теперь вам нужно XOR эти байты с

for (var i=0;i<4;i++){ 
    var byteThatIsNotRemembered = input.ReadByte()^0x149; 
} 

Наконец, сохранить их к list

// need to instantiate list somewhere near top 
var byteList = new List<byte>(); 

// ... other code that we've written 

for (var i=0;i<4;i++){ 
    var byteThatIsRememberedNow = input.ReadByte()^0x149; 

    // need to cast to byte because^operator creates ints 
    byteList.Add((byte) byteThatIsRememberedNow); 
} 

// you'll need to replace this with something for your text box... 
// couldn't figure out from your question 
for (var i=0;i<byteList.Length;i++){ 
    Console.WriteLine(byteList[i]); 
} 

Все вместе сейчас ...

// need to instantiate list somewhere near top 
var byteList = new List<byte>(); 

using (var input = File.OpenRead(path)) 
{ 
    input.Seek(0x1D, SeekOrigin.Begin); 
    for (var i=0;i<4;i++){ 
     var byteThatIsRememberedNow = input.ReadByte()^0x149; 
     byteList.Add((byte) byteThatIsRememberedNow); 
    } 
} 

// you'll need to replace this with something for your text box... 
// couldn't figure out from your question 
for (var i=0;i<byteList.Length;i++){ 
    Console.WriteLine(byteList[i]); 
} 

Вот аналогичный dotnetfiddle, где я использую строку вместо файла для создания потока.

Сообщите мне, если это было полезно

+0

Дайте мне знать, если у вас есть вопросы по поводу моего сообщения, или если вам нужны другие вопросы. Я заметил, что вы хотите отобразить десятичный номер 'byte'. Просто 'byte.ToString()' даст вам десятичное значение объекта 'byte'. –

+0

Ваш ответ полезен и дает мне представление о том, что читать дальше, идея состояла в том, чтобы читать 4 байта, например, 92 3B 48 6B, если я прочитал их по первой попытке, я не понял, что это даже не близко, желая получить, представляет собой различные формулы excel в C#, (BITXOR ((HEX2DEC (D6)), 149)), поэтому 92 в dec должно быть 146, а xoring с 149 должен дать мне 5 и так далее, а не отображать все это в текстовом поле например 5555. Таким образом, вы пройдете через свой код и попытаетесь что-то изменить –

+0

@domsrt Я немного смущен вашим ответом. Во-первых, ваша формула не имеет сбалансированных круглых скобок, но я предполагаю, что вы имеете в виду «BITXOR ((HEX2DEC (D6), 149)». Если это так, я думаю, вы что-то путаете. Значения XORing не зависят как номера отображаются на вашем компьютере. XOR _always_ ** _ always _ ** использует 1 и 0 номера для вычисления ответа, независимо от того, просматриваете ли вы число в десятичной или шестнадцатеричной или двоичной или восьмеричной, или базовый pi и т. д. Я думаю, что в excel с использованием HEX2DEC (...) _may_ нужно (не уверен, но это мое предположение) ... –

1

Вам нужно что-то вроде этого: (. Если ваши мечты состоят из ответов на вопросы программирования)

using (var br = new BinaryReader(File.OpenRead(path))) 
{ 
    br.BaseStream.Position = 0x1D; 
    byte[] bytes = br.ReadBytes(4); 

    for (int i = 0; i < 4; i++) 
    { 
     bytes[i] = (byte)(bytes[i]^149); 
    } 

    textBox1.Text = new string(bytes.Select(Convert.ToChar).ToArray()); 
} 
+0

хорошо работает, но результат - куча символов charaters, я пытался читать байты в десятичном формате без hex или ascii, а не в xor каждый с 149 и получить результат в формате 1234, попытается посмотреть options и в msdn Мне может быть что-то не хватает –

+0

Попробуйте 'textBox1.Text = string.Join (", ", bytes);'. –

Смежные вопросы