
2013/11/8 Rahul Mathur <srivmuk@gmail.com>
On Fri, Nov 8, 2013 at 11:49 AM, Igor R <boost.lists@gmail.com> wrote:
I have a string Timestamp of 1383889129 which on ONLINE conversion from string to hex gives a 10 bytes as "31 33 38 33 38 38 39 31 32 39".
The above is not "conversion from string to hex", but merely a hex representation of every ascii character in "1383889129" string.
But, the need is to have the TIMEStamp in 8 bytes only.
It's unclear what you want exactly. If you need a time-stamp as a number, use boost::lexical_cast<int>("1383889129") or any other ascii-to-int conversion.
YES, do have the TIMESTAMP from string viz 1383889129. Since, the
declaration of TIMESTAMP is "char TIMESTAMP[8]", so looking how to convert this? I think you didn't provide enough information, so different solutions can give different answers. Perhaps you don't have enough information or it's up to you to choose? 1383889129 looks like a decimal it. You say you get it as a string. You can convert it to a 32-bit int like this: string s = "1383889129"; uint32_t i = boost::lexical_cast<uint32_t>(s); // you probably can use plain old unsigned int if it has 32 bits Now you can put this int's hex representation into an array of 8 bytes. I assume each byte is supposed to contain a character representing a hexadecimal digit [0-9a-f]. Here it is left unspecified, if ts[0] should be the least or most significant digit. Here's what you can do (ts[0] will be the most significant digit; warning: not tested, I'm not sure if I named the manipulators right, but I hope you'll get the idea): TIMESTAMP ts; ostringstream os; os << hex << setfill('0') << setw(8) << i; boost::copy( os.str(), ts ); // copy from Boost.Range HTH, Kris