在 C 的内存位置存储一个 2byte 值
Store a 2byte value in memory location in C
在这个问题上我需要你的帮助:
我想在 char 数组中存储一个 2 字节的数字我尝试了以下 2 种逻辑,但都失败了
字符增益[10];
char* ptr = buff;
/*
我想存储一个 2 字节的值,比如 750
方法一 */
短一 = 750;
*(++ptr)=a; //没有工作在缓冲区的前 2 个字节中得到这些值:0xffffffc8 0xffffffef
/*方法二*/
短*a=750;
memcpy(++ptr,a,2) // 出现分段错误
我知道我可以通过除以 256 来做到这一点,但我想使用更简单的方法
*ptr++=750/256;
*ptr=750%256;
char buff[10];
short a=1023;
//To store in char array
buff[0] = a & 0xff;
buff[1] = (a >> 8) & 0xff;
// To get original value.
short b = ((buff[1] << 8) & 0xff00) | (buff[0] & 0x00ff);
最简单的方法就是:
uint16_t u16 = 12345;
memcpy(&buff[i], &u16, 2);
memcpy
会根据您的CPU endianess.
放置数据
或者您可以进行位移,但由于位移本身是 endianess-independent,您需要根据字节顺序手动为 buff
选择正确的索引。
内存布局类似 Little Endian:
buff[i] = u16 & 0xFFu;
buff[i+1] = (u16 >> 8) & 0xFFu;
像Big Endian这样的内存布局:
buff[i] = (u16 >> 8) & 0xFFu;
buff[i+1] = u16 & 0xFFu;
在这个问题上我需要你的帮助:
我想在 char 数组中存储一个 2 字节的数字我尝试了以下 2 种逻辑,但都失败了
字符增益[10];
char* ptr = buff;
/* 我想存储一个 2 字节的值,比如 750 方法一 */
短一 = 750; *(++ptr)=a; //没有工作在缓冲区的前 2 个字节中得到这些值:0xffffffc8 0xffffffef
/*方法二*/
短*a=750; memcpy(++ptr,a,2) // 出现分段错误
我知道我可以通过除以 256 来做到这一点,但我想使用更简单的方法
*ptr++=750/256;
*ptr=750%256;
char buff[10];
short a=1023;
//To store in char array
buff[0] = a & 0xff;
buff[1] = (a >> 8) & 0xff;
// To get original value.
short b = ((buff[1] << 8) & 0xff00) | (buff[0] & 0x00ff);
最简单的方法就是:
uint16_t u16 = 12345;
memcpy(&buff[i], &u16, 2);
memcpy
会根据您的CPU endianess.
或者您可以进行位移,但由于位移本身是 endianess-independent,您需要根据字节顺序手动为 buff
选择正确的索引。
内存布局类似 Little Endian:
buff[i] = u16 & 0xFFu;
buff[i+1] = (u16 >> 8) & 0xFFu;
像Big Endian这样的内存布局:
buff[i] = (u16 >> 8) & 0xFFu;
buff[i+1] = u16 & 0xFFu;