首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RGB整数值转换为RGB值。

将RGB整数值转换为RGB值。
EN

Code Golf用户
提问于 2015-01-03 23:52:13
回答 14查看 7.8K关注 0票数 7

例如,在传统的web十六进制中,某个基数-16表示RGB值。例如,45A19C在RGB中等于(69,161,156)。

然而,您将从该数字转换为RGB值,而不是在基数16中给出该数字。

所以在上面的例子中,45A19C的基数是4563356。因此,转换为RGB的4563356等于(69,161,156)。

因此,假设给定的整数先前存储在变量n中,并且介于0到16777215之间。取数字n,并将其转换为0到255之间的RGB值。将三个值作为列表R,g,b返回或保存在变量中。

在这里可以找到RGB到RGB int.。此链接转换与您的尝试相反的做法。

最短代码获胜。

如果需要澄清,请问,这样我就可以把我的问题解决得更有帮助。

EN

回答 14

Code Golf用户

发布于 2015-01-04 09:42:13

AVR,0

比AVR寄存器中的寄存器大的数量用多个寄存器表示。因此,当将32位'n‘传递给一个函数时,它作为4x8位寄存器传递。有效的R(r24)、G(r23)和B(r22)可以直接寻址,而无需借助CPU的寄存器寻址来完成任何额外的工作。

以下是解压操作的一些C代码:

代码语言:javascript
复制
unsigned char r( unsigned long n ){return n>>16&255;}
unsigned char g( unsigned long n ){return n>>8&255;}
unsigned char b( unsigned long n ){return n>>0&255;}

avr-gcc 4.8拆卸的例子:

代码语言:javascript
复制
.global r
.type   r, @function
r:
ret
.size   r, .-r

.global g
.type   g, @function
g:
mov r24,r23
ret
.size   g, .-g

.global b
.type   b, @function
b:
mov r24,r22
ret
.size   b, .-b

对于红色,GCC只是发出返回代码,因为红色字节刚好在返回寄存器中。对于绿色和蓝色,它将相应的寄存器复制到返回寄存器中并返回。实际的打包/解压是由ABI处理的--当在函数调用边界以外的某个地方处理时,它完全由寄存器寻址处理。复制和返回操作代码都是查看CPU中发生的这种情况所需的开销--编译器可以直接使用这些寄存器(如果不需要)将结果放在返回寄存器中。当处理任何32位整数时,都可以使用免费的RGB包装/解压。

另一种思考方法是AVR的寄存器将大量数字表示为8位寄存器的列表,而该列表恰好为我们解压缩RGB。

票数 15
EN

Code Golf用户

发布于 2015-01-04 00:10:21

鸵鸟0.5.0,13字节

代码语言:javascript
复制
n16 6?+256B1>

尽管它与@MartinBüttner的基本相同,但也不妨发布这篇文章来推广鸵鸟。(我唯一改变的是b -> B,因为所有内置的函数要么是鸵鸟的符号,要么是大写字母,还有G -> 16,因为鸵鸟没有那么漂亮的数字--它确实应该这么做)。

将代码翻译为Golfscript (18个字节):

代码语言:javascript
复制
n 16 6?+256base 1>
票数 6
EN

Code Golf用户

发布于 2015-01-04 00:07:54

Mathematica,22字节

代码语言:javascript
复制
IntegerDigits[n,256,3]

基本上和我的CJam答案一样。但是我不知道有多少语言可以用任意的基来处理基转换,所以我想我应该同时发布这两个版本。

这个函数通过使用IntegerDigits的第三个参数来处理前导零,该参数将结果填充到指定的数字数。

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

https://codegolf.stackexchange.com/questions/43155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档