sprintf format 부분 질문

embster의 이미지

if (image.valid(pickx,picky)) {
            moremsg.sprintf("(%d,%d)=#%0*x ",
                          pickx, picky,
                        image.hasAlphaBuffer() ? 8 : 6,
                          image.pixel(pickx,picky));
            message += moremsg;
        }

위 소스 안에 sprintf format 부분에서 #%0*x 이런식의 포멧은 처음 봐서.. 어떤식으로 되는건지 잘 모르겠습니다..
image.hasAlphaBuffer() ? 8 : 6, 여기서 8이나 6이 어느부분에 대입되고 image.pixel(pickx,picky)); 의 리턴된 값이 어는곳에 대입이 되나요 아니면 두항목이 곱하기 연산을 해서 하는것인가요??

lifthrasiir의 이미지

%0*x에서 *는 그 specifier의 field width를 나타냅니다. 보통 이 자리에는 숫자가 오는 게 보통이지만 field width가 상황에 따라서 변해야 할 경우 출력하고자 하는 값 바로 전에 인자를 넣어서 사용합니다. 곱하기랑은 별 상관이 없고 빈 자리를 나타낸다고 생각하시면 됩니다 ;)

이 경우 *에 (image.hasAlphaBuffer() ? 8 : 6)이 들어 가고 %0*x에 image.pixel(pickx,picky)가 들어 가겠습니다. 따라서 image.hasAlphaBuffer()가 참이면 %08x, 거짓이면 %06x로 동작하게 되겠지요. (하긴 코드를 보니 알파채널이 있냐 없냐에 따라서 출력하는 방법이 달라지겠네요)

- 토끼군