2012-06-27 3 views
0

У меня возникла проблема с некоторыми материалами Socket.C# reverseed ushort

Выход, который я хочу, это 0x5801, который обратный - 0x0158, который на самом деле 344 как укорт.

ushort t = 344; 
p.WriteString("\x58\x01", false); 

Теперь я хочу иметь переменную вместо жестко закодированного гексагона. Я уже пробовал с некоторыми классами ReverseBit и так далее, но ничего действительно не сработало.

Благодарим за помощь!

+0

Что такое 'p'? Вы пытались использовать «BinaryWriter» и «BinaryReader»? Они заботятся об этих проблемах. – Marlon

ответ

6

Стартовал не используя WriteString. Вы хотите написать бинарные данные, не так ли? Поэтому либо используйте WriteShort, либо напишите байты напрямую.

Вы не дали много информации для работы (например, типа p, или то, что эти данные предназначаются для представления), но если это проблема байт, вы могли бы рассмотреть вопрос об использовании моего MiscUtil который имеет EndianBinaryWriter и EndianBinaryReader которые похожи на классы BinaryWriter и BinaryReader, но с возможностью указания сущности.

+0

Эй, 'p' - пользовательский класс, который добавляет строки в строку для использования в пакетах. – Moritz

+0

@Moritz: Так что вы говорите, что класс, который вы нам не показали, не работает так, как вы этого хотите? Как вы ожидали от нас помощи? –

+0

(Предположительно, тот факт, что вы приняли мой ответ, подсказывает, что это помогло ...) –

1

Я думаю, что это то, что вы пытаетесь сделать:

ushort t = 344; 
var b = BitConverter.GetBytes(t); 
if (!BitConverter.IsLittleEndian) 
    Array.Reverse(b); 
//write b 
+0

Вместо этого вы должны использовать IPAddress.HostToNetworkOrder. – Will

1

порядка байтов, возвращаемых методом BitConverter.GetBytes зависит о контенте вашей компьютерной архитектуры; однако порядок байтов ожидается на BitConverter.ToString, что означает, что вам не нужно выполнять ручное реверсирование, если обе операции выполняются на одной машине.

ushort t = 344; 
byte[] bytes = BitConverter.GetBytes(t); 
string hex = BitConverter.ToString(bytes); 
hex = hex.Replace("-", ""); 
p.WriteString(hex);