在C中的内存位置存储一个2字节的值

发布于 2025-01-16 20:26:21 字数 408 浏览 0 评论 0原文

我在这个问题上需要你的帮助:

我想在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

老旧海报 2025-01-23 20:26:21

最简单的方法很简单:

uint16_t u16 = 12345;
memcpy(&buff[i], &u16, 2);

memcpy将根据您的CPU endianess< /a>.

或者,您可以进行位移位,但由于位移位本身与字节顺序无关,因此您需要根据字节顺序手动为 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;

The easiest way is simply:

uint16_t u16 = 12345;
memcpy(&buff[i], &u16, 2);

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:

buff[i]   = u16 & 0xFFu;
buff[i+1] = (u16 >> 8) & 0xFFu;

Memory layout like Big Endian:

buff[i]   = (u16 >> 8) & 0xFFu;
buff[i+1] = u16 & 0xFFu;
泅渡 2025-01-23 20:26:21
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);
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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文