【问题标题】:int32 to hex string not working.. Typescriptint32 到十六进制字符串不起作用..打字稿
【发布时间】:2020-07-09 10:15:15
【问题描述】:

我有一个 int32,其中包含按以下方式编码的 rgba 值:

values = [255, 255, 255, 255];
this.colorInt = ( values[0] << 24 ) | ( values[1] << 16 ) | ( values[2] << 8 ) | values[3];

在这种情况下,所有值的范围都是0-255

现在,当我尝试将其转换为十六进制字符串时:

this.colorInt.toString(16);

我想得到这个:#FFFFFFFF 但我得到了这个:-1 我看过很多关于这个的 stackoverflow 帖子,但我无法让它工作......

我在这里做错了什么?

【问题讨论】:

  • 颜色代码有三个十六进制数字,而不是 4
  • 我知道,但它应该仍然适用于 4 对吧?

标签: javascript typescript int hex data-conversion


【解决方案1】:

这是因为整数 -1(基数 10)= 1111111111111111111111111111111(基数 2)

如果您使用按位运算符,您会看到这个问题,因为它只处理 32 位整数。

像乘法这样的其他运算符会处理这个问题。由于它们不是按位运算符,因此它们的计算不限于 32 位整数。 您可以使用以下内容。

this.colorInt = 255 + (255 * 2**8) + (255 * 2**16) + (255*2**24)
this.colorInt.toString(16) // "ffffffff"

否则我建议的更易读的方法是

function hexer(a,b,c,d){
    return ([a,b,c,d].map(x=>x.toString(16)).join(''))
}
hexer([255,255,255,255]) // "ffffffff"

【讨论】:

    【解决方案2】:

    颜色由 3 种颜色 (RGB) 表示,为了引入 alpha 变量,您的情况将不起作用。

    你的代码在这里工作

    const values = [255, 255, 255];
    const colorInt = ( values[1] << 16 ) | ( values[2] << 8 ) | values[3];
    
    console.log(colorInt);
    console.log(colorInt.toString(16));

    【讨论】:

    • 请问为什么当你添加 alpha 时它会停止工作?
    • 如果你这样做 toString(24) 它也不起作用,为什么?
    猜你喜欢
    • 2010-10-04
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多