32-битное побитовое исключающее ИЛИ значение отрицания двоичного пакета

Мне необходимо сгенерировать 4-байтовую контрольную сумму, которая определяется как «32-битное побитовое значение исключающего ИЛИ отрицания» некоторого фрагмента двоичных данных. Я переписываю разделы кодирования / декодирования определенного интерфейса MML для биллинговой системы в Erlang.

Версия C / C ++ такой функции приведена ниже:

Function: GetChkSum
Description:
A 32-bit bitwise Exclusive-OR negation value of "message header
+ session header + transaction header + operation information".
Input:
len indicates the total length of "message header + session header
+ transaction header + operation information".
Buf indicates the string consisting of message header, session header,
transaction header, and operation information.
Output: res indicates the result of the 32-bit bitwise Exclusive-OR negation
valuevoid GetChkSum(Int len, PSTR buf, PSTR res)
{
memset(res, 0, MSG_CHKSUM_LEN);
for(int i=0; i<len; i+=4)
{
res[0]^=(buf+i)[0];
res[1]^=(buf+i)[1];
res[2]^=(buf+i)[2];
res[3]^=(buf+i)[3];
};
res[0]=~res[0];
res[1]=~res[1];
res[2]=~res[2];
res[3]=~res[3];
};

Я обязан переписать это на Erlang. Как я могу это сделать?

-1

Решение

Нет сложностей сделать xor в erlang (оператор, который нужно использовать, это bxor и работает с целым числом). Но для написания любого кода вам нужно сначала определить «формат» ввода и вывода. Из вашего примера, я думаю, это может быть ascii-код, сохраненный в двоичном виде или строка ??

Как только вы определили тип ввода, результат может быть оценен с помощью функции типа:

negxor(<<>>,R) -> int_to_your_result_type(bnot(R) band 16#FFFFFFFF);
negxor(<<H:32,Q:binary>>,R) -> negxor(Q,R bxor H).

и вы можете позвонить с negxor(your_input_to_binary(Input),0),

1

Другие решения


По вопросам рекламы [email protected]