diff --git a/src/tl/tl/tlString.cc b/src/tl/tl/tlString.cc index d57dee236..7bd12c832 100644 --- a/src/tl/tl/tlString.cc +++ b/src/tl/tl/tlString.cc @@ -1975,17 +1975,17 @@ sprintf (const char *f, const std::vector &vv, unsigned int a0) os.setf (std::ios::uppercase); } if (a < vv.size ()) { - os << vv [a].to_ulong (); + os << vv [a].to_ulonglong (); } } else if (*cp == 'u' || *cp == 'U') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); if (a < vv.size ()) { - os << vv [a].to_ulong (); + os << vv [a].to_ulonglong (); } } else if (*cp == 'd' || *cp == 'D') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); if (a < vv.size ()) { - os << vv [a].to_long (); + os << vv [a].to_longlong (); } } else if (*cp == 's' || *cp == 'S') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); diff --git a/src/tl/unit_tests/tlStringTests.cc b/src/tl/unit_tests/tlStringTests.cc index 634b38e6e..8d8696b09 100644 --- a/src/tl/unit_tests/tlStringTests.cc +++ b/src/tl/unit_tests/tlStringTests.cc @@ -57,6 +57,20 @@ TEST(1) EXPECT_EQ (tl::sprintf("%lu %llu %02x", 1, 2, 167), "1 2 a7"); EXPECT_EQ (tl::sprintf("%lu %llu %02X", 1, 2, 761), "1 2 2F9"); EXPECT_EQ (tl::sprintf("%c%c", 'a', 'X'), "aX"); + + // 64bit numbers + EXPECT_EQ (tl::sprintf("%x", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%lx", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%llx", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%d", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%ld", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%lld", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%d", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%ld", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%lld", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%u", 100000000000ull), "100000000000"); + EXPECT_EQ (tl::sprintf("%lu", 100000000000ull), "100000000000"); + EXPECT_EQ (tl::sprintf("%llu", 100000000000ull), "100000000000"); } TEST(1a)