Переписать с си на Java [требует правки]

255
12 апреля 2018, 14:38

Есть код формирования сетевого пакета на си необходимо составить на java.Но плохо владею си. `Вот пример кода на C. Чтобы было понятно как сформировать запрос.

typedef struct
{
BYTEaddr;
BYTEcmd;
WORDlen;
void*buf;
}IVLPACKET;
//---******************************************************************************
// converts two byte 14 bit integer value to 16 bit code to send via protocol
USHORT Set14to16(USHORT n) { return (((n&0xFF80)<<2) | 0x0100) | (((n&0x007F)<<1) | 0x0001);}
//---******************************************************************************
// reverse converion, two byte 16 bit code to 14 bit integer value
USHORT Set16to14(USHORT n) { return (((n&0xFC00)>>2) | ((n&0x00FE)>>1)); }
//---******************************************************************************
/*
CheckSumCalc calculates checkSum
*/
USHORT CheckSumCalc(BYTE *buf, DWORD len)
{
USHORT s = 0;
for(DWORD i = 0; i < len; i++)
s += buf[i];
return Set14to16(s);
}
//---******************************************************************************
/*
ConvSend fills the *buf according to the content in *pac structure
maxlen is the size of the buf. Used to avoid buf overfull
returns the length of filled data
*/
long ConvSend(BYTE *buf, IVLPACKET *pac, long maxlen)
{
if(maxlen < pac->len + 4 + (pac->len + 6)/7 + 2)
return 0;
USHORT n; // 16 bit unsigned integer
int bi;
buf[0] = ((pac->addr & 0x7F)<<1);
buf[1] = ((pac->cmd & 0x7F)<<1) | 1;
n = Set14to16(pac->len);
buf[2] = n&0xFF;
buf[3] = n>>8;
bi = 4+pac->len;
if(pac->buf && pac->len)
{
memcpy(buf+4, pac->buf, pac->len);
memset(buf+bi, 1, (pac->len + 6)/7);
for(USHORT i = 0; i < pac->len; i++)
if(!(buf[4+i]&1))
{
buf[4+i] |= 1;
buf[bi+i/7] |= 1<<((i%7) + 1);
}
bi += (pac->len + 6)/7;
}
n = CheckSumCalc(buf, bi);
buf[bi] = n&0xFF;
buf[bi + 1] = n>>8;
return (bi+2);
}`
READ ALSO
Уравнение из массива чисел

Уравнение из массива чисел

Пользователь вводит числа и скобки через пробел (на каждую открытую скобку всегда есть закрытая)Например 18 7 ( 5 3 ) 2

255
Белый лист для Таск Менеджера

Белый лист для Таск Менеджера

ЗдравствуйтеВ некоторых приложениях существуют кнопки, которые отправляют тупых юзеров на нужную страницу в настройках конкретного приложения...

254
Быстрый thread pool для бенчмарков

Быстрый thread pool для бенчмарков

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

243
javaFx vBox Stretch layout

javaFx vBox Stretch layout

Как сделать, чтобы некоторые элементы, расположенные в Vbox не растягивалисьСкажем, там у меня есть Vbox, и там 2 элемента, изображение и таблица

237