Ara*_*aki 0 c indexing pointers bit-manipulation
我正在尝试从 64 位 unsigned long 返回某些 16 位部分,但我一直在思考如何实现这一点。这是我试图实现的功能:
// assume i is a valid index (0-3 inclusive)
unsigned short get(unsigned long* ex, int i) {
// return the 16-bit section based on the index i
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我有unsigned long ex = 0xFEDCBA9876543210;,那么我的函数get(ex, 0)将返回0x3210,get(ex, 1)将返回0x7654,等等。我对 C 非常陌生,我仍在尝试围绕位管理和指针。感谢任何建议或反馈,以帮助我更好地理解 C。
你必须使用位移
#include <stdint.h>
uint16_t get(uint64_t ex, int i)
{
return (uint16_t)(ex >> i*16);
}
Run Code Online (Sandbox Code Playgroud)
您可以仅按值传递。没有理由传递指针。这会将位向右移动,这意味着它们将成为低位值。当它转换为 16 位类型时,它会丢失高阶位。
我包括在内stdint.h是因为它定义了精确大小的类型。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |