簡體   English   中英

如何從JS中的字符串中獲取十六進制整數?

[英]How to get hex integer from a string in JS?

我想將這個: "#FFFFFF"轉換為: 0xFFFFFF 不使用eval怎么可能?

提前致謝,

去掉“#”並使用parseInt()

var hex = parseInt(str.replace(/^#/, ''), 16);

然后,如果你想以十六進制查看它,你可以使用.toString()

console.log(hex.toString(16));

使用此代碼:

 var resultP = document.getElementById('result'); var btn = document.querySelector('button'); var input = document.querySelector('input'); function convert(hex) { return Number(`0x${hex.substr(1)}`); } btn.addEventListener('click', () => { resultP.innerHTML = convert(input.value); })
 * { font-family: Arial; }
 <!DOCTYPE html> <html> <head> <title>Hex code to hex integer</title> <meta charset="UTF-8" /> </head> <body> <input type="text" maxlength="7" /> <button>Done</button> <br /> Result: <p id="result"></p> </body> </html>

我知道這個答案來得很晚,但我遇到了類似的問題,這對我有幫助(請注意,下面提供的代碼不是我的,這只是多個 StackOverflow 答案的組合)。

一般工作流程:將十六進制代碼轉換為 RGB,然后再轉換為 0x 表示。

您可以在此處查看不同的 HEX TO RGB 轉換選項: RGB to hex 和 hex to RGB

我使用這個函數來完成它(很容易反轉,因為它返回一個數組 [r, g, b]。也適用於速記的十六進制三元組,例如“#03F”)。

hexToRgb(hex) {
  return hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i
      , (m, r, g, b) => "#" + r + r + g + g + b + b)
      .substring(1).match(/.{2}/g)
      .map(x => parseInt(x, 16));
}

最終轉換的想法取自這里: convert rgba color value to 0xFFFFFFFF form in javascript

就像用戶@Chanwoo Park 提到的那樣,這種表示中的顏色 0xFFFFFFFF 形成為 Alpha、藍色、綠色、紅色,而不是 Alpha、紅色、綠色、藍色。 因此,簡單地將顏色 #4286F4 轉換為 0xFF4286F4 不會呈現相同的顏色。

您可以做的是反轉 RGB 值,然后進行轉換。 完整代碼:

hexToRgb(hex) {
  return hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i
      , (m, r, g, b) => "#" + r + r + g + g + b + b)
      .substring(1).match(/.{2}/g)
      .map(x => parseInt(x, 16));
},
getFillColor(color) {
  let rgbColor = this.hexToRgb(color);
  let reversed = rgbColor.reverse();
  let hex = 0xff000000 | (reversed[0] << 16) | (reversed[1] << 8) | reversed[2];

  return parseInt(`0x${(hex >>> 0).toString(16)}`);
}

PS 這是 Vue.js 代碼,但轉換為 vanilla JS 應該非常簡單。

所有功勞歸用戶所有: https : //stackoverflow.com/users/7377162/chanwoo-park、https : //stackoverflow.com/users/10317684/ricky-mo、https : //stackoverflow.com/users/3853934/ micha%c5%82-per%c5%82akowski

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM