在C中的内存位置存储一个2字节的值
我在这个问题上需要你的帮助:
我想在 char 数组中存储一个 2 字节数字我已经尝试了以下 2 个逻辑,但都失败了
char buff[10];
char* ptr = buff;
/* 我想存储一个 2 字节值,比如 750 方法1 */
短a = 750; *(++ptr)=a; // 无法在缓冲区的前 2 个字节中获取这些值: 0xffffffc8 0xffffffef
/* 方法 2 */
Short *a=750; memcpy(++ptr,a,2) // 出现分段错误
我知道我可以通过除以 256 来完成此操作,但我想使用更简单的方法
*ptr++=750/256;
*ptr=750%256;
I am in need of your help in this problem:
I want to store a 2 byte number in a char array I have tried the below 2 logics but both have failed
char buff[10];
char* ptr = buff;
/*
I want to store a 2 byte value say 750
Method 1 */
short a = 750;
*(++ptr)=a; //Did not work got these values in first 2 bytes in buffer: 0xffffffc8 0xffffffef
/* Method 2 */
short *a=750;
memcpy(++ptr,a,2) // Got segmentation fault
I know I can do this by dividing by 256 but I want to use a simpler method
*ptr++=750/256;
*ptr=750%256;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最简单的方法很简单:
memcpy
将根据您的CPU endianess< /a>.或者,您可以进行位移位,但由于位移位本身与字节顺序无关,因此您需要根据字节顺序手动为
buff
选择正确的索引。内存布局类似 Little Endian:
内存布局类似 Big Endian:
The easiest way is simply:
memcpy
will place the data according to your CPU endianess.Alternatively you can bit shift, but since bit shifts themselves are endianess-independent, you need to manually pick the correct indices for
buff
according to endianess.Memory layout like Little Endian:
Memory layout like Big Endian: