Преобразовать шестнадцатеричную строку в двоичный пакет в C для SOCKET

Мне нужна помощь с кодом, который я должен передать от PHP до C.
Код позволяет отправить через SOCKET инструкцию на удаленное устройство.
Он отлично работает для меня в PHP, но я должен преобразовать его в C. Все хорошо, кроме PHP pack (), я не вижу, как заменить его в C.
В основном я должен передать это:

$message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19");

Mesaje_in_c = ¿?

Буду признателен за поддержку, спасибо!

Это код PHP:

<?php

$host    = "192.168.0.140";
$port    = 8081;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
print "socket_create() falló: razón: " . socket_strerror(socket_last_error()) ."\n";
} else {
print "create socket OK.\n";
}

socket_set_option(
$socket,
SOL_SOCKET,  // socket level
SO_RCVTIMEO, // timeout option
array(
"sec"=>10, // Timeout in seconds
"usec"=>0  // I assume timeout in microseconds
)
);

// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
if ($result === false) {
print "socket_connect() falló.\nRazón: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
print "connect to server OK.\n";
}

$message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19");
echo "Message To server Bin: ".$message."\n";
echo "Message dec: ";
print_r(unpack("H*", $message))."\n";

// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");

// get server response
$result = socket_read($socket, 1024) or die("Could not read server response\n");

print "Reply From Server  Bin:".$result."\n";

$resultHex = unpack("H*", $result);
print "Reply From Server  Hex:";
print_r($resultHex)."\n";

// close socket
socket_close($socket);
?>

И это код C для завершения:

#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[]){

WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char *message , server_reply[2000];
int recv_size;

printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
}

printf("Initialised.\n");

//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
{
printf("Could not create socket : %d" , WSAGetLastError());
}

printf("Socket created.\n");server.sin_addr.s_addr = inet_addr("192.168.0.140");
server.sin_family = AF_INET;
server.sin_port = htons(8081);

//Connect to remote server
if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
{
puts("connect error");
return 1;
}

puts("Connected");

//Send some data
message = "a5000000015e0000bc19";
// ???? message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19");

if( send(s , message , strlen(message) , 0) < 0)
{
puts("Send failed");
system("pause");
return 1;
}
puts("Data Send\n");

//Receive a reply from the server
if((recv_size = recv(s , server_reply , 2000 , 0)) == SOCKET_ERROR)
{
puts("recv failed");
}

puts("Reply received\n");

//Add a NULL terminating character to make it a proper string before printing
server_reply[recv_size] = '\0';
puts(server_reply);

system("pause");
return 0;
}

Буду признателен за поддержку, спасибо!

0

Решение

Это работает?

char message[] = "\xa5\x00\x00\x00\x01\x5e\x00\x00\xbc\x19";
0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector