Arduino: Converting uint64_t to string

John picture John · Dec 10, 2014 · Viewed 8.5k times · Source

I have a binary that I was able to convert to a uint64_t. It's big, so I really needed a uint64_t. I'm having trouble converting it to a char array. I can do it in a standalone project but not on Arduino

Some roadblocks that I encountered:

  • I can't use sprintf ("%llu"): It's giving me a result of 0 and further googling shows that it wasn't really implemented
  • I can't use itoa: Yes, itoa was working for smaller numbers, but i'm dealing with a uint64_t and it seems like it reached its limit and giving me a negative result
  • I can't use String(123456789): I can use it for other types like int and long, but I can't pass in a uint64_t because it's not supported in the parameters
  • I can't use long long: Searching for it only gives me a variation on uint64_t (eg. use sprintf)
  • I'm having trouble using VC include in Visual Studio: When i go to my Project Properties > Configuration Properties > C/C++ > General > Additional Include Drectories and add in the path "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\" Visual Studio deletes it.

Any input is greatly appreciated.

Answer

Amir Samakar picture Amir Samakar · Jun 16, 2017

Assuming you want to print "number" in HEX:

  uint64_t number;
  unsigned long long1 = (unsigned long)((number & 0xFFFF0000) >> 16 );
  unsigned long long2 = (unsigned long)((number & 0x0000FFFF));

  String hex = String(long1, HEX) + String(long2, HEX); // six octets