Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Structure overlay question
Message
From
07/11/1997 19:04:52
Edward Crawford
City Facilities Management
Glasgow, United Kingdom
 
General information
Forum:
Visual FoxPro
Category:
Other
Title:
Structure overlay question
Miscellaneous
Thread ID:
00059032
Message ID:
00059032
Views:
69
Paul,
I am relatively new to the Windows NT world and I am sure these is a simple explaination for this, but I haven't found it yet. I have a buffer and want to parse it by using a structure; for example:
#include
#include
typedef struct {
unsigned short port; // 2 bytes, right?
struct in_addr ip_addr; // 4 bytes
} address;

void main () {
char buff[20];
address *addrPtr;
unsigned short thePort;
unsigned long theAddr;

memset (buff, '\0', 20);
buff[0] = (unsigned char)0x9A;
buff[1] = (unsigned char)0x10;
buff[2] = (unsigned char)0xCF; // 2nd octet
buff[3] = (unsigned char)0xAD; // 1st octet
buff[4] = (unsigned char)0xD5; // 4th
buff[5] = (unsigned char)0x74; // 3rd
buff[6] = (unsigned char)0x0B; // shouldn't see
buff[7] = (unsigned char)0x16; // shouldn't see

addrPtr = (address *) buff; // overlay the structure
thePort = addrPtr->port;
theAddr = addrPtr->ip_addr.s_addr;
printf ("Port = %hd \n", thePort);
printf ("Address = %d.%d.%d.%d \n", addrPtr->ip_addr.s_net, addrPtr->ip_addr.s_host, addrPtr->ip_addr.s_lh, addrPtr->ip_addr.s_impno);
}
When I run this, I am able to get the Port number OK, but the ip_addr portion is always 2 bytes off. Using the debugger shows the following in memory:
9A 10 CF AD D5 74 0B 16
^
The addrPtr->ip_addr.s_addr points here to 'D5'; why doesn't it point to 'CF'???
I am using MS Visual C++ 5.0 on NT 4.0 (Service Pack 3)
Thanks for the help.
Next
Reply
Map
View

Click here to load this message in the networking platform