Следующая проблема: У меня есть программа C#, которая делает некоторое дешифрование на очень низком уровне. Я использовал инструмент, чтобы преобразовать большую часть кода C# в Java, который работал для большинства вещей, но когда дело доходит до таких частей низкого уровня, инструмент выходит из строя. Следующая структура данных используется внутри:Port C# Code to Java
[StructLayout(LayoutKind.Explicit)]
private struct ByteUInt
{
[FieldOffset(0)]
public byte Byte0;
[FieldOffset(1)]
public byte Byte1;
[FieldOffset(2)]
public byte Byte2;
[FieldOffset(3)]
public byte Byte3;
[FieldOffset(0)]
public uint FullUint;
}
В программе, байты и UINT внутри этой структуры изменяются в несколько раз по отдельности, например, например MyByteUint.Byte0 &= someByte;
или MyMyteUint.FullUint = someByte & 0x0F
или некоторые другие побитовые операции. Поскольку uint ссылается на ту же память, что и на 4 байта, если я меняю один из них, uint тоже изменится и наоборот.
Поскольку в Java нет реальных указателей, я не знаю, как лучше переносить такую вещь на Java, потому что я не могу напрямую ссылаться на память. Есть ли какое-либо решение иначе, чем создание класса с геттерами и сеттерами, делающими поля частными и обновляющими uint/bytes при изменении других значений?
Спасибо за ваш вклад.
Следует отметить, что байты подписаны в Java (от -128 до 127), но не в C# (если вы не используете 'sbyte'.) – Cyral
Спасибо за эту информацию. В моем случае я думаю, что это не большая проблема, потому что их представление бит должно быть одинаковым. – trixn