RGBA로 HEX2를 변환하는 방법?


11

예술의 세계는 색상이 풍부하지만 네트워크의 세계는 다른 색상의 예술 세계보다 훨씬 더 풍부합니다. 그렇기 때문에 한 유형의 색상 형식을 다른 유형으로 변환하는 방법을 알아야합니다.

도전은 자명하다 :

주어진 HEX 코드 ( #00ff0080:)RGBA (예 :) 로 변환하는 것보다 프로그램 / 함수를 작성하십시오 rgba(0, 255, 0, 0.5).

규칙 :

  • HEX를 RGBA로 변환하기위한 외부 라이브러리 / 내장 기능은 허용되지 않습니다. 그러나 이와 같은 jQuery와 구문 바꾸기는 허용됩니다.
  • 표준 입 / 출력 규칙이 적용됩니다.
  • 알파의 형식은 (1 == 100 %) 또는 실제로 중요하지 않은 다른 (100 == 100 %) 사이 일 수 있습니다.
  • 출력 4 개의 변환 된 값 (문자열, 배열, 목록, 선택)을 반환하는 은 유연 합니다.
  • #처음에 입력하지 않고 입력을 선택할 수 있습니다 . 따라서 입력을 #RRGGBBAA또는 로 입력 할 수 있습니다 RRGGBBAA. 16 진 코드 (# )는 항상 8 .
  • 알파를 포함하여 모든 값을 255로 나누어야합니다. 최소 소수점 정밀도 (알파의 경우 소수점 2 자리)입니다.

테스트 사례

Input:  00ff0080
Output: 0, 255, 0, 0.5

채점

, 바이트 수가 가장 적은 코드가 우선합니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Dennis

1
"16 진 코드"를 문자열로 가져와야 합니까? Leading없이 가져갈 수 있다고 말하면 #32 비트 정수 값입니다. 그렇게하는 것이 합법적입니까?
코디 그레이

답변:


4

자바 스크립트 (ES6), 73 54 50 바이트

(편집 된 챌린지 인 @LeakyNun 및 @CraigAyre 덕분에 일부 바이트가 절약되었습니다.)

s=>s.match(/../g).map((c,i)=>('0x'+c)/(i-3?1:255))

let f=

s=>s.match(/../g).map((c,i)=>('0x'+c)/(i-3?1:255))

console.log(f('00ff0080'));


Rick, 이제 최종 사양을 정한 것으로 보이므로 답변을 업데이트 할 수 있습니다.
얽히고 설킨

잘 얽히고 설킨의 코멘트 @대로 사용하여 몇 바이트를 저장할 수 있습니다으로 eval대신 parseInt:s=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
크레이그 아이 레

@CraigAyre evalparseInt골프 목적 을 위한 훌륭한 대안입니다 . 감사합니다!
Rick Hitchcock

@RickHitchcock, 걱정 마세요! 를 사용하여 정규식에서 몇 바이트를 면도 할 수도 있습니다 /../g. replace이상 match/를 사용하여 더 줄일 수 있습니다.map
Craig Ayre

아, 규칙이 바뀌 었으므로 초기 파운드 기호가 더 이상 필요하지 않습니다.
Rick Hitchcock

3

apt , 13 바이트

선행없이 문자열로 입력을 #받습니다. rgba 값을 배열로 출력합니다.

ò ®nG
pUo /#ÿ

그것을 테스트


설명

변수를 통해 입력으로 문자열을 암시 적으로 가져옵니다 U.
"00ff0080"

ò

문자열을 길이가 2 인 요소의 배열로 분할하십시오.
["00","ff","00","80"]

®nG

배열을 맵핑하고 각 요소를 기본 16 문자열에서 10 진수로 변환하십시오. 다음 줄 바꿈 때문에 해당 배열은 variable에 암시 적으로 할당됩니다 U.
[0,255,0,128]

Uo

배열에서 마지막 요소를 팝합니다.
128

/#ÿ

255로 나눕니다.
0.5019607843137255

p

결과를 다시 밀어 넣고 U최종 배열을 내재적으로 출력하십시오.
[0,255,0,0.5019607843137255]


2

PHP , 63 바이트

배열로 출력

$h=array_map(hexdec,str_split($argn,2));$h[3]/=255;print_r($h);

온라인으로 사용해보십시오!

PHP , 80 바이트

rgba 값으로 출력,없는 입력 #

$h=array_map(hexdec,str_split($argn,2));$h[3]/=255;echo"rgba(",join(",",$h),")";

온라인으로 사용해보십시오!

PHP , 88 바이트

rgba 값으로 출력 #

for(;$i<7;)$h[]=hexdec($argn[++$i].$argn[++$i]);$h[3]/=255;echo"rgba(",join(",",$h),")";

온라인으로 사용해보십시오!




1

젤리 , 15 14 바이트

Øhi$€’s2ḅ⁴÷4¦⁹

온라인으로 사용해보십시오!

작동 원리

Øhi$€’s2ḅ⁴÷4¦⁹ - main link, takes input without # and all lowercase
   $€             - to each input character:
  i               - return its 1-based index in
Øh                - the string "0123456789abcdef"
     ’            - decrement (otherwise 0 is mapped to 1 and f to 16)
      s2          - split the characters into groups of two
        ḅ⁴        - convert from base 16 to decimal
           4¦     - on the fourth element:
          ÷       - divide by
             ⁹    - 256

@EricTheOutgolfer 덕분에 -1 바이트


1

PHP, 72 바이트

Jörg의 어레이 출력 버전은 타의 추종을 불허합니다. 그러나 다른 옵션이 있습니다.

<?=($a=hexdec($argn))>>24,",",255&$a>>16,",",255&$a>>8,",",(255&$a)>256;

로 파이프로 실행하십시오 -F. #중요하지 않은 일반 CSV 출력

또는 73 바이트 (로 실행 -R) :

for($a=hexdec($argn);$i++<4;)echo(255&$a>>32-8*$i)/($i<4?:256),","[$i>3];

공백이있는 74 바이트 :

<?=($a=hexdec($argn))>>24,$c=", ",255&$a>>16,$c,255&$a>>8,$c,(255&$a)>256;

평범하지 않은 81 바이트 :

rgba(<?=($a=hexdec($argn))>>24,$c=", ",255&$a>>16,$c,255&$a>>8,$c,(255&$a)/256?>)


1

엑셀, 99 바이트

=HEX2DEC(LEFT(A1,2))&","&HEX2DEC(MID(A1,3,2))&","&HEX2DEC(MID(A1,5,2))&","&HEX2DEC(RIGHT(A1,2))/256

1

SmileBASIC, 50 바이트

INPUT H$RGBREAD VAL("&H"+H$)OUT R,G,B,A?R,G,B,A/#L

16 진 문자열은 VAL ()을 사용하여 숫자로 변환 된 다음 RGBREAD가 각 바이트를 추출합니다. #L은 값이 256 인 상수입니다.

RGBREAD는 ARGB 색상에서 채널을 추출하도록 설계되었지만 실제로는 4 바이트 정수를 4 개의 개별 바이트로 분할하기 때문에 순서는 중요하지 않습니다.


나는 항상 기본 응답을 보는 것을 좋아 하지만 16 진수를 rgba로 변환하기 위해 내장 기능을 사용하므로이 응답이 유효하지 않을 수 있습니다.
Taylor Scott

16 진수 문자열을 정수로 변환하는 추가 단계가 필요하기 때문에 16 진수-> rgba 내장으로 간주되지 않는다고 생각합니다.
12Me21

실제로, 그것을 다시 보면, 당신이 옳다고 생각합니다 .16 진수에서 int 로의 명시 적으로 변환하면 유효합니다.
Taylor Scott


0

JS ES2015, 84 바이트

$=>{a=[1,3,5,7].map(b=>eval("0x"+$.substr(b,2)));a[3]=(a[3]/256);return a.join(",")}

이것은 기능입니다. 사용하여 실행

( CODE )("#00ff0080")


0

q / kdb +, 43 바이트

해결책:

{(16 sv'(.Q.n,6#.Q.a)?/:2 cut x)%1 1 1 256}

예:

q){(16 sv'(.Q.n,6#.Q.a)?/:2 cut x)%1 1 1 256}"00ff0080"
0 255 0 0.5

설명:

{                                         } / anonymous lambda function
                        2 cut x             / split input into 2-char length lists
                     ?/:                    / returns index where (each-right) item is found in 'the list'
        (           )                       / 'the list'
              6#.Q.a                        / Q.a is lowercase alphabet, 6# takes first 6 chars
         .Q.n,                              / Q.n is "012..89", so prepend this onto the "abcdef"                         
  16 sv'                                    / converts each index from base 16 to base 10
 (                            )%1 1 1 256   / divide this output by 1,1,1,256 to get alpha in 0..1 range 

0

APL (Dyalog) , 24 바이트

⎕IO←0많은 시스템에서 기본값이 필요합니다 . 없이 대문자로 입력하라는 메시지를 표시합니다 #.

256÷⍨@316⊥⍉4 2⍴⍞⍳⍨⎕D,⎕A

온라인으로 사용해보십시오!

⎕D,⎕AD igits 다음에 A lphabet

⍞⍳⍨ 텍스트 입력 프롬프트 (니모닉 : 따옴표가있는 콘솔) 에서 각 문자 의 ɩ ndex를 찾으십시오.

4 2⍴(R)의 네 개의 행의 열 매트릭스 eshape

 전치 (기본 변환은 열 단위로 작동하기 때문에)

16⊥16 진법으로  평가하다

 수확량 (3과 16을 분리하여 제공)

256÷⍨@3 4 번째 요소를 256으로 나누기




0

Excel VBA, 90 바이트

범위에서 입력 [A1]을 받아 VBE 즉시 창으로 출력 하는 익명의 VBE 즉시 창 기능 .

For i=1To 7Step 2:[B1]=i:?[Hex2Dec(Mid(A1,B1,2))]/IIf(i=7,256,1)&""+IIf(i<7,", ","");:Next

0

Vim, 46 바이트

:s/../$((16#&)) /g␊iecho ␛$hhi*100/255␛:w !sh␊

없이 입력 #을 받아 화면에 인쇄하여 돌아갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.