类型转换无效指针指向无符号短整型
Typecasting void pointer to unsigned short
嗨,我正在尝试使用代码,http://blog.firetree.net/2006/08/23/nasa-srtm-elevation-data/,没有成功,经过多次追逐,我发现它在哪里失败了,但不知道如何修复它,请帮忙,这已经做了大约 6 个小时。这是失败的行。数据是指向内存映射文件的空指针。
unsigned short datum=((unsigned short*)data)[i];
我在OpenSuse上使用gcc编译器。我在 64 位系统上。提前谢谢。
我认为
这可能是由内存对齐引起的。在某些平台中,指针值不能强制转换为某些类型。
例如,平台需要 int* 应与 4 对齐,因此0x12345可以是 void* 或 char*,但如果将其分配给 int*,则会发生崩溃。
对于您的情况,您可以先将 void 指针强制转换为无符号字符*,然后将 2 个无符号字符转换为无符号短字符:
unsigned char a =((unsigned char*)data)[i];
unsigned char b =((unsigned char*)data)[i+1];
if (platform_is_little_endian()) {
unsigned short datatum = (b << sizeof(unsigned char)) | a;
}
else {
// platform is big endian
unsigned short datatum = (a << sizeof(unsigned char)) | b;
}
如果你说它在那个时候崩溃了,那么我会想象你正在数组之外阅读。但是,至少可以说,将指向无符号短短的指针存储为无符号短短的指针很有趣,这甚至可以编译吗?
通过 Donald Tangs 方法和程序在数组外部读取的实现相结合来解决。对于其他潜在用户,当找到num_rows num_cols的值时会出现问题,因为作者的平方根函数不是平方根。
相关文章:
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 直接初始化无符号短整型的标准行为
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 无符号和有符号短整型的位宽
- 将 BYTE 数组转换为无符号长整型
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 模板参数可以既是 int 又可以是无符号长整型吗?
- 用有符号长整型结果减去无符号长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- 将字符串存储在无符号长整型的向量中
- 如果我尝试在 c++ 中将大于 pow(2,64)-1 的值分配给无符号长整型怎么办?
- 将 QString 转换为无符号短整型
- 在C++中,我如何使用无符号短整型和短整型来减去hugeintger
- 使用 ifstream 从C++文件中读取二进制无符号短整型
- 无法将参数 1 从"cli::array<Type> ^"转换为"无符号短整型"
- 类型转换无效指针指向无符号短整型
- 将浮点转换为无符号短整型时出现舍入问题