【发布时间】:2015-03-12 23:24:31
【问题描述】:
所以我遇到了一个奇怪的问题。究竟是什么原因造成的?
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
int main()
{
int16_t a = 0;
int8_t b = 0;
b = INT8_MIN;
void* a_ptr = &a;
void* b_ptr = &b;
memcpy(a_ptr,b_ptr,sizeof(int8_t));
printf("min b: %d | copied a: %d", b, a);
}
结果是:min b: -128 |复制了:128。
所有负值似乎都有这个问题。 我想使用 memcpy,那么我应该怎么做才能使它工作?
【问题讨论】:
-
您不能使用
memcpy将 8 位值复制到 16 位值。别再尝试了。 -
不是更大的类型吗?
-
是的,但是
memcpy不进行任何转换——它只是复制字节。输出的位模式将与输入相同,但在这种情况下,您使用的两种类型会以不同方式解释该值。 -
谷歌搜索“签名扩展”
标签: c type-conversion c99 memcpy memory-alignment