Here is a perfect example of why I insist people post a complete program that is reproduces a problem!
I copied the struct definition and printf line into a small test program. I filled in the missing parts, substituting zero for the first variable since I have no idea what "header.from_node" is. Since it's referenced by "%d", I assumed at integer. (if this isn't actually an integer, it very well may be the cause of the problems you're seeing)
Here is the code I tested:
Code:
struct payload_t
{
byte id;
byte command; //read, write, set digital, set analog
byte pin; //pin number
unsigned int data;
};
payload_t test;
void setup() {
test.id = 12;
test.command = 34;
test.pin = 56;
test.data = 78910;
}
void loop() {
Serial.printf("%d %d %d %d %u\r\n",
0, test.id, test.command, test.pin, test.data);
delay(500);
}
As you can see in this screenshot, I was not able to reproduce the problem.

Normally when people post these bug reports without a complete program, I don't do this work to turn them into a complete program for testing. It pretty much always ends up this way.
I'm not denying there may indeed be a bug. I really do want to investigate and fix any bugs. But until you post a complete program that reproduces the problem, what am I supposed to do?