forked from Makuna/NeoPixelBus
Fixed and improved HtmlColor::ToNumericalString (#792)
* Fixed and improved HtmlColor::ToNumericalString which decremented bufLen twice and returned wrong results * Strictly expect least 8 characters --------- Co-authored-by: Daniel Brall <git@bradan.eu>
This commit is contained in:
@@ -36,28 +36,28 @@ static inline char hexdigit(uint8_t v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a Html encoded hex color string (#aabbcc) with null termination.
|
||||||
|
*
|
||||||
|
* @param buf the buffer to write the string to
|
||||||
|
* @param bufSize the maximum buffer size (must be at least 8 characters)
|
||||||
|
* @return The amount of chars written to buf including the null terminator.
|
||||||
|
*/
|
||||||
size_t HtmlColor::ToNumericalString(char* buf, size_t bufSize) const
|
size_t HtmlColor::ToNumericalString(char* buf, size_t bufSize) const
|
||||||
{
|
{
|
||||||
size_t bufLen = bufSize - 1;
|
if (bufSize >= 8)
|
||||||
|
|
||||||
if (bufLen-- > 0)
|
|
||||||
{
|
|
||||||
if (bufLen > 0)
|
|
||||||
{
|
{
|
||||||
buf[0] = '#';
|
buf[0] = '#';
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t color = Color;
|
uint32_t color = Color;
|
||||||
for (uint8_t indexDigit = 6; indexDigit > 0; indexDigit--)
|
for (size_t indexDigit = 6; indexDigit > 0; --indexDigit) // note pre-decrement
|
||||||
{
|
|
||||||
if (bufLen > indexDigit)
|
|
||||||
{
|
{
|
||||||
buf[indexDigit] = hexdigit(color & 0x0000000f);
|
buf[indexDigit] = hexdigit(color & 0x0000000f);
|
||||||
}
|
|
||||||
color >>= 4;
|
color >>= 4;
|
||||||
}
|
}
|
||||||
|
buf[7] = '\0';
|
||||||
|
|
||||||
buf[(bufLen < 7 ? bufLen : 7)] = 0;
|
return 8;
|
||||||
}
|
}
|
||||||
return 7;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user