У меня есть приложение в (windows), которое отправляет журналы в двоичном формате. C# код для преобразования, что струны:python parse двоичные данные
public static CounterSampleCollection Deserialize(BinaryReader binaryReader)
{
string name = binaryReader.ReadString(); // counter name
short valueCount = binaryReader.ReadInt16(); // number of counter values
var sampleCollection = new CounterSampleCollection(name);
for (int i = 0; i < valueCount; i++)
{
// each counter value consists of a timestamp + the actual value
long binaryTimeStamp = binaryReader.ReadInt64();
DateTime timeStamp = DateTime.FromBinary(binaryTimeStamp);
float value = binaryReader.ReadSingle();
sampleCollection.Add(new CounterSample(timeStamp, value));
}
return sampleCollection;
}
У меня есть питон UdP сокет, который слушает порт, но не знаю, как преобразовать двоичные данные я получаю в строки, так что я может проанализировать его дальше.
Может любой эксперт python, пожалуйста, помогите мне преобразовать эту функцию в функцию python, чтобы я мог преобразовать полученные данные в python.
Мой код до сих пор:
import socket
UDP_IP = "0.0.0.0"
UDP_PORT = 40001
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(8192) # buffer size is 8192 bytes
print "[+] : ", data
// this prints the binary
// convert the data to strings ??
S = struct.Struct ('>' + 'iiifffdi H H') sSize = с. размер в то время как True: данные, addr = sock.recvfrom (8192) # размер буфера 8192 байта #print "*** \ n", data print "*** \ n" для n в диапазоне (0 , len (data), sSize): print s.unpack (данные [n: n + sSize]) == Я получаю: struct.error: unpack требует строкового аргумента длиной 40 – admin0