lin*_*eak 1 c parsing buffer pointers memcpy
我有这样的char缓冲区
char *buff = "aaaa0006france";
Run Code Online (Sandbox Code Playgroud)
我想提取字节4到7并将其存储在int中.
int i;
memcpy(&i, buff+4, 4);
printf("%d ", i);
Run Code Online (Sandbox Code Playgroud)
但它会打印垃圾值.
这有什么问题?
字符串
0006
Run Code Online (Sandbox Code Playgroud)
没有与整数6相同的二进制表示.相反,它的位表示为四个ASCII字符,表示字形0,字形0,字形0,然后是字形6.这有十六进制表示
0x30303036
Run Code Online (Sandbox Code Playgroud)
如果您尝试在little-endian系统上盲目地将这些位重新解释为数字,那么您将获得808,464,438.在大端系统上,你得到909,127,728.
如果要将字符串的子字符串转换为数字,则需要查找将字符串转换为数字的函数.您可能想尝试这样的事情:
char digits[5];
/* Copy over the digits in question. */
memcpy(digits, buff + 4, 4);
digits[4] = '\0'; /* Make sure it's null-terminated! */
/* Convert the string to a number. */
int i = strtol(digits + 4, NULL, 10);
Run Code Online (Sandbox Code Playgroud)
这使用strtol函数将文本字符串转换为数字,以将文本显式转换为整数.
希望这可以帮助!