Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将浮点型变量赋给无符号整型变量,位图像,而不是强制转换

如何将浮点型变量赋给无符号整型变量,位图像,而不是强制转换
EN

Stack Overflow用户
提问于 2011-12-03 03:00:57
回答 3查看 3.9K关注 0票数 4

我知道这是一件奇怪的事情,而且它不能移植。但是我有一个分配的无符号整数数组,有时我想在其中“存储”一个浮点数。我不想强制转换浮点数或将其转换为最接近的等效整数;我想将浮点数的精确位图像存储在无符号整数的分配空间中,这样以后我就可以将其作为浮点数检索,而它将保留其原始的浮点值。

EN

回答 3

Stack Overflow用户

发布于 2011-12-03 03:11:11

这可以通过简单的复制来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint32_t dst;
float    src = get_float();

char * const p = reinterpret_cast<char*>(&dst);

std::copy(p, p + sizeof(float), reinterpret_cast<char *>(&src));

// now read dst

向后复制的工作原理与此类似。

票数 6
EN

Stack Overflow用户

发布于 2011-12-03 03:04:02

只需对相应的内存位置进行重新解释转换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float f = 0.5f;
unsigned int i = *reinterpret_cast<unsigned int*>(&f);

或者更像C语言的版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unsigned int i = *(unsigned int*)&f;

从你的问题文本中,我假设你已经意识到,如果floatunsigned int的大小不同,这就会中断,但在大多数常见的平台上,两者都应该是32位的。

编辑:正如Kerrek所指出的,这似乎是一种未定义的行为。但我仍然坚持我的答案,因为它是简短和精确的,并且确实应该在任何实际的编译器上工作(说服我相反的)。但是,如果你想要一个无UB的答案,请看看Kerrek的答案。

票数 2
EN

Stack Overflow用户

发布于 2011-12-03 03:53:46

如果真的有必要的话,你可以使用reinterpret_cast。你甚至不需要像其他答案提到的那样玩弄指针/地址。例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int i;
reinterpret_cast<float&>(i) = 10;

std::cout << std::endl << i << " " << reinterpret_cast<float&>(i) << std::endl;

也可以工作(如果您是qurious,还会打印1092616192 10 ;)。

编辑:

来自C++标准(关于reinterpret_cast):

5.2.10.7指向对象的指针可以显式地转换为指向不同类型的对象的指针,将“指向T1的指针”类型的右值转换为“指向T2的指针”类型(其中T1和T2是对象类型,其中T2的对齐要求不比T1的对齐要求更严格),并返回到其原始类型产生原始指针值,这种指针转换的结果未指定。

5.2.10.10如果“指向T1的指针”类型的表达式可以使用reinterpret_cast显式转换为“指向T1的指针”类型,则可以将类型为T2的左值表达式转换为“指向T2的引用”类型。也就是说,使用内置的&和*运算符,引用类型转换reinterpret_cast<T&>(x)与转换*reinterpret_cast<T*>(&x)具有相同的效果。结果是一个左值,它引用与源左值相同的对象,但具有不同的类型。不创建临时函数,不创建副本,不调用构造函数(12.1)或转换函数(12.3)。67)

因此,似乎一致地重新解释指针并不是未定义的行为,并且使用引用具有与获取地址、重新解释和延迟获得的指针相同的结果。我仍然认为这不是未定义的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8365143

复制
相关文章
iterm2(zsh)粘贴慢解决办法
# .zshrc pasteinit() { OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]} zle -N self-insert
ACK
2022/05/10
7380
IE之页面加载慢.
场景 场景是大屏页面一张深色背景, 里面一些文本元素以及图表展示. 结果在IE下发现加载异常缓慢, 还有部分人员反馈页面卡死. 后台读写优化 默认处理图片逻辑是, ImageIO读取原图, 转成byt
用户1216491
2018/01/24
2.4K0
idea使用debug模式启动非常慢
后来发现,之前在调试代码时不注意给属性加了断点,去掉idea的Breakpoints里的java field watchpoints就不卡了,如下:
凯哥Java
2022/12/16
2.2K0
idea使用debug模式启动非常慢
ntpdate同步时间慢
随着时间的推移,计算机的时钟会倾向于漂移. 网络时间协议 (NTP) 是一种确保您的时钟保持准确的方法。当硬件设备不带电池和无RTC的时候,基本靠网络时间协议来进行同步时间
程序手艺人
2019/02/21
3.6K0
Xshell/Xftp连接Linux速度非常慢(已解决)
1、打开sshd服务的配置文件/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no
Arebirth
2020/06/19
5.4K0
Android Studio导入项目非常慢的解决办法
问题     Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势。然而在实际使用时,依然有不少不爽的地方。Android Studio原生支持使用Gradle来构建项目本是个不错的想法,使用动态语言Groovy定义项目构建过程,避免了build.xml文件的繁琐定义。但是Gradle的二进制包体积较大,而且用户可能按照了不同的Gradle版本,构建时可能会出现各种问题。因此又提出了Gradle Wrapp
24K纯开源
2018/01/18
1.4K0
Android Studio导入项目非常慢的解决办法
WordPress后台加载慢的快速优化方法
WordPress后台加载慢,一般与WordPress程序加载海外资源有关,这里推荐安装一个简单易用的插件来进行优化。
超级小可爱
2023/02/20
8970
Ghost 解决 jsdelivr 资源加载慢的问题
用了很久的自建 Ghost 博客系统不知道从哪个版本开始,页面加载速度忽然变慢了很多。看了下加载的资源,发现多了很多走 jsdelivr cdn 的资源,加载速度竟然长达半分钟。。。
mythsman
2023/03/08
2.2K0
Ghost 解决 jsdelivr 资源加载慢的问题
WordPress后台加载慢的快速优化方法
WordPress后台加载慢,一般与WordPress程序加载海外资源有关,这里推荐安装一个简单易用的插件来进行优化。
用户7491502
2021/06/24
3.7K0
WordPress后台加载慢的快速优化方法
大表分页查询非常慢,怎么办?
在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。
Java极客技术
2022/12/04
1.5K0
大表分页查询非常慢,怎么办?
为什么我的Redis这么“慢”?
Redis 作为内存数据库,拥有非常高的性能,单个实例的 QPS 能够达到 10W 左右。
架构师修行之路
2020/08/20
3.7K0
【Android】再来一篇Fragment的懒加载(只加载一次哦)
2017-7-14更新: 目前有人使用后出现了诸如首次打开显示空白界面,但点击有反应;或来回切换又变空白界面的问题。这些问题我暂时还不知道该怎么解决,后期有时间时会具体去分析下问题该怎么解决。所以你如果要使用该代码,希望考虑一下,我自己的小应用目前是没碰到这些问题。
请叫我大苏
2018/05/17
1.6K0
我先入坑啦,等你哦!
1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
夕梦
2021/06/07
3640
我先入坑啦,等你哦!
为啥我的Python这么慢 (一)
在Python系列教程中,我们提到一个概念字符串是不可修改的。这一点可以通过id函数来判断确实是对的。但是这个概念会对我们写作程序有什么影响一直没有特别深的理解。 直到有一次,实验室一个朋友要读基因组数据,结果发现3 G的基因组读一晚上都没读完,就很诧异,看了下代码,这么写的。 基因组序列是GRCh38.fa,FASTA格式,序列行每行70个字符,共44,284,892行 (记住行数有多大),示例如下。 >chr1 NNNNN...(60个N)...NNNNN ACGTA...(60个Nt)...ACGTA
生信宝典
2018/02/05
6490
css加载慢导致加载瞬间白屏(dom比css加载快导致)
2,css样式压缩下,用sass编译一下,放在head顶部,head再用incloud包起来,放在文件夹;
kirin
2020/11/30
2.2K0
还原我的图床数据库,哦耶~
之前的服务器到期后,用了两年的服务器,里面的东西还是蛮多的。我的网站博客,图床,和一些搭建的其他网站。最后我虽然给所有的东西都迁移了,唯独这个图床没有成功迁移,打开网站地址,报错。
废江_小江
2022/09/05
3170
使用 JS 监听加载,避免谷歌广告拖慢网页的加载速度
如果我的网页上有多个广告单元,把该段引入 JS 的代码 放到 head 里 既可以达到一次载入 JS 所有 ins 都可以接到广告,或者还可以使用 JS 监听的方式加载。
Yangsh888
2022/03/28
2.1K0
100%解决github加载慢、github加速
.NET Core Community是一个基于并围绕着 .NET 技术栈展开组织和活动的非官方、非盈利性的民间开源社区,提供了很多优秀的 .NET 开源项目。
老九
2021/08/13
3.2K0
启用Windows防火墙后,FTP传输非常慢
我们有一个计划任务,该任务使用Windows命令行FTP程序在两个Windows服务器之间传输大文件(〜130 MB)。速度很慢(大约需要30分钟),有时会在传输完成之前终止。服务器是2003年(发送)和2008年(接收)。
镭速
2023/06/01
7790
点击加载更多

相似问题

展示主题哦-我-zsh

45

bash,zsh :声明[*] (哦,我的)

13

写自己的哦-我-zsh插件

13

哦,我的ZSH & Vim插入光标

12

哦-我的-zsh历史日期格式

124
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文