Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将浮点值映射到JS中的十六进制范围?_Javascript_Hex_Mapping - Fatal编程技术网

Javascript 将浮点值映射到JS中的十六进制范围?

Javascript 将浮点值映射到JS中的十六进制范围?,javascript,hex,mapping,Javascript,Hex,Mapping,假设我们有以下几点: 对于x,0x0000的最小值等于0.00000,而0xffff等于1.00000 假设我有一个值0.6829,我如何将它映射到Javascript中的十六进制值0x.. 编辑: 我之所以需要它,是因为我想通过UDP向我的飞利浦色调灯光发送一条消息,我的问题的相关文档如下,请注意,我现在使用的是XY颜色空间而不是RGB: 流消息的示例: Example { 'H', 'u', 'e', 'S', 't', 'r', 'e', 'a', 'm', //proto

假设我们有以下几点:

对于x,
0x0000
的最小值等于
0.00000
,而
0xffff
等于
1.00000

假设我有一个值0.6829,我如何将它映射到Javascript中的十六进制值
0x..

编辑

我之所以需要它,是因为我想通过UDP向我的飞利浦色调灯光发送一条消息,我的问题的相关文档如下,请注意,我现在使用的是XY颜色空间而不是RGB:

流消息的示例:

Example

{

      'H', 'u', 'e', 'S', 't', 'r', 'e', 'a', 'm', //protocol

      0x01, 0x00, //version 1.0

      0x07, //sequence number 7

      0x00, 0x00, //Reserved write 0’s

      0x00, //color mode RGB

      0x00, // Reserved, write 0’s

      0x00, 0x00, 0x01, //light ID 1

      0xff, 0xff, 0x00, 0x00, 0x00, 0x00, //red

      0x00, 0x00, 0x02, //light ID 2

      0x00, 0x00, 0x00, 0x00, 0xff, 0xff //blue

}
支持的颜色空间格式为RGB和xy+亮度。每个单独的颜色组件在API上都有16位分辨率。RGB值通过色调桥转换为xy+亮度

灯支持的x和y值具有12位分辨率和11位亮度。这意味着API上的16位分辨率将被截断

为了在各种类型的灯(即色域)上获得最佳的颜色一致性,最好发送xy+亮度值,因为这些值与硬件无关

对于xy,0x0000的最小值等于0.00000,0xffff等于1.00000


使用的颜色空间格式在消息头的“颜色空间”字节部分中定义。

看起来您只需将最终数字分隔为两个字节:

函数getBytes(val){ 常量hexVal=数学圆(val*0xffff); const secondByte=hexVal%0x100; 常量firstByte=(hexVal-secondByte)/0x100; 返回[firstByte,secondByte]; }
log(getBytes(0.6829))看起来您只需将最终数字分成两个字节:

函数getBytes(val){ 常量hexVal=数学圆(val*0xffff); const secondByte=hexVal%0x100; 常量firstByte=(hexVal-secondByte)/0x100; 返回[firstByte,secondByte]; }
log(getBytes(0.6829))0xffff应该精确表示1.0还是0.99998?它应该精确表示1.0!0xffff是65535,所以0.6829*65535是44753.8515,四舍五入:44753,这是0xAED1。@ChrisG想解释一下吗?为什么以0xffff 65535为例?十六进制数就是这样工作的。你没有查到转换吗?无论如何,JS理解十六进制,例如
alert(0xffff*0.6829)
工作正常并显示
44753.8515
。你需要最终结果做什么?如果这只是一个数字,那么格式就无关紧要了,因为它的数量是相同的,无论是用十六进制还是十进制表示。0xffff应该是精确的1.0还是0.99998的表示?它应该是精确的1.0!0xffff是65535,所以0.6829*65535是44753.8515,四舍五入:44753,这是0xAED1。@ChrisG想解释一下吗?为什么以0xffff 65535为例?十六进制数就是这样工作的。你没有查到转换吗?无论如何,JS理解十六进制,例如
alert(0xffff*0.6829)
工作正常并显示
44753.8515
。你需要最终结果做什么?如果这只是一个数字,那么格式就无关紧要了,因为它的数量是相同的,不管是用十六进制还是十进制表示。为什么不
secondByte=hexVal&255
firstByte=hexVal>>8
?除以255而不是256是额外的odd@harold对,修正了。为什么不
secondByte=hexVal&255
firstByte=hexVal>>8
?除以255而不是256是额外的odd@harold对,修正了。