feat(big): add SBigFromStr

This commit is contained in:
Adam Heinermann 2024-11-15 03:50:22 -08:00 committed by superp00t
parent fac094793a
commit 896c3c0414
5 changed files with 42 additions and 0 deletions

View file

@ -48,6 +48,10 @@ void SBigFromBinary(BigData* num, const void* data, uint32_t bytes) {
FromBinary(num->Primary(), data, bytes);
}
void SBigFromStr(BigData* num, const char *str) {
FromStr(num->Primary(), str);
}
void SBigFromUnsigned(BigData* num, uint32_t val) {
FromUnsigned(num->Primary(), val);
}

View file

@ -20,6 +20,8 @@ void SBigDel(BigData* num);
void SBigFromBinary(BigData* num, const void* data, uint32_t bytes);
void SBigFromStr(BigData* num, const char* str);
void SBigFromUnsigned(BigData* num, uint32_t val);
void SBigMod(BigData* a, BigData* b, BigData* c);

View file

@ -167,6 +167,14 @@ void FromBinary(BigBuffer& buffer, const void* data, uint32_t bytes) {
}
}
void FromStr(BigBuffer& buffer, const char* str) {
SetZero(buffer);
for (; *str; str++) {
Mul(buffer, buffer, 10);
Add(buffer, buffer, *str - '0');
}
}
void FromUnsigned(BigBuffer& buffer, uint32_t value) {
buffer[0] = value;
buffer.SetCount(1);

View file

@ -25,6 +25,8 @@ uint32_t ExtractLowPartSx(uint64_t& value);
void FromBinary(BigBuffer& buffer, const void* value, uint32_t bytes);
void FromStr(BigBuffer& buffer, const char* str);
void FromUnsigned(BigBuffer& buffer, uint32_t value);
uint32_t HighBitPos(const BigBuffer& buffer);

View file

@ -281,6 +281,32 @@ TEST_CASE("SBigFromBinary", "[big]") {
}
}
TEST_CASE("SBigFromStr", "[big]") {
BigDataTest num;
SECTION("with empty string") {
SBigFromStr(num, "");
CHECK(num->Primary().Count() == 0);
}
SECTION("with string containing numbers") {
SBigFromStr(num, "123456");
CHECK(num->Primary().Count() == 1);
CHECK(num->Primary()[0] == 123456);
}
SECTION("with string containing letters (original bug)") {
SBigFromStr(num, "ABC");
const unsigned int expected_num = ('A' - '0') * 100 + ('B' - '0') * 10 + ('C' - '0');
CHECK(num->Primary().Count() == 1);
CHECK(num->Primary()[0] == expected_num);
}
}
TEST_CASE("SBigFromUnsigned", "[big]") {
SECTION("creates bigdata from 0") {
BigData* num;