🎄 Happy Holidays! 🥳
Most of Solace is closed December 24–January 1 so our employees can spend time with their families. We will re-open Thursday, January 2, 2024. Please expect slower response times during this period and open a support ticket for anything needing immediate assistance.
Happy Holidays!
Please note: most of Solace is closed December 25–January 2, and will re-open Tuesday, January 3, 2023.
Parsing characters from Binary data
Hi @marc @Aaron @all
I am deserialising some stream of binary data using the payload format as —
typedef struct {
char messageType; // 'N' or 'G' ('N' – New Normal Order, 'G' – New Spread Order)
long timestamp; // Numeric Time in nanoseconds from 01-Jan-1980 00:00:00
double orderID; // Numeric Day Unique Order Reference Number
int token;
char orderType; // 'B' - Buy Order, 'S' - Sell Order int price;
int quantity; // Numeric Quantity of the order
} OrderStruct;
After the deserialisation , there are some unwanted data for char bytes being fetched.
for example —
Order 1: Type:^P Timestamp:1929249811 OrderID:0.000000 Token:74732288 OrderType:^@ Price:1364066304 Quantity:2127492296
The first 16 bytes are for snapshot header. That is being fetched correctly. The problem occurs after the 16 bytes i.e. while fetching the order messages.
w
Comments
-
Hi @Naruto. Ok… is this C? This is just your data structure format, the "in-memory" representation within your app. But doesn't say how the data is encoded on the wire. You need that information from the publisher application or documentation. Trying to reverse engineer it is hard! For example:
- If there are only 2 options for
messageType
, it could be encoded as a single bit! Or maybe a whole ASCII char (1 byte), or a UTF-16 char (2 bytes)? Or maybe 4 bytes to allow for future expansion, and is a custom encoding. - If your timestamp is nanos since epoch, it should look something like
1712321293665926900
(which is right now). Not1929249811
- EDIT: just noticed that it's nanos since Jan 1 1980, not 1970 like normal epoch. That's odd..? So the expected number should be quite a bit smaller than the one above, something like:
1396745293665926900
- EDIT: just noticed that it's nanos since Jan 1 1980, not 1970 like normal epoch. That's odd..? So the expected number should be quite a bit smaller than the one above, something like:
orderID
is a double? Are you sure? That seems very odd. That should certainly be an int or long. Or a String.- You have control/escape characters
^@
and^P
listed, which probably correspond to binary 0x00 and 0x10. These aren't ASCII chars. - A quantity of 2,127,492,296? Someone is buying or selling 2.1 billion items?
Please go and ask the application developers/architects for the encoding format for these messages.
1 - If there are only 2 options for