473,405 Members | 2,210 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

istringstream "hexadecimal string" value

The string object value_f doesn't produce the right output. At issue,
- I suspect - is the conversion from string to int with istringstream.
An alternate approach? Thanks in advance

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

// Conversion Functions
template<typename T>
T fromString(const std::string& s) {
std::istringstream is(s);
T t;
is >> t;
return t;
}
template<typename T>
std::string toString(const T& t) {
std::ostringstream s;
s << t;
return s.str();
}
//
// test function to convert values:
// 0xAFFF from string to int
// 0xAFFF from int to string

int main()
{

int d(0xAFFF);
string value_d = toString( d );
cout << "value_d is [" << value_d << "]" << endl;

string value_e( " 4999 " );
string value_f( " 0xAFFF " );

int val_1 = fromString<int>( value_e );
cout << "val_1 is [" << val_1 << "]" << endl;
int val_2 = fromString<int>( value_f );
cout << "val_2 is [" << val_2 << "]" << std::hex << endl;

}
Jul 22 '05 #1
7 3649
"ma740988" <ma******@pegasus.cc.ucf.edu> wrote...
The string object value_f doesn't produce the right output. At issue,
- I suspect - is the conversion from string to int with istringstream.
An alternate approach?
The default extraction operator with default format setting expects
a _decimal_ notation.
Thanks in advance

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

// Conversion Functions
template<typename T>
T fromString(const std::string& s) {
Change to

T fromString(const std::string& s,
std::ios_base& (*f)(std::ios_base&) = std::dec) {

std::istringstream is(s);
T t;
is >> t;
Change to

is >> f >> t;
return t;
}
template<typename T>
std::string toString(const T& t) {
Change to

std::string toString(const T& t,
std::ios_base& (*f)(std::ios_base&) = std::dec) {
std::ostringstream s;
s << t;
Change to

s << f << t;
return s.str();
}
//
// test function to convert values:
// 0xAFFF from string to int
// 0xAFFF from int to string

int main()
{

int d(0xAFFF);
string value_d = toString( d );
cout << "value_d is [" << value_d << "]" << endl;

string value_e( " 4999 " );
string value_f( " 0xAFFF " );

int val_1 = fromString<int>( value_e );
cout << "val_1 is [" << val_1 << "]" << endl;
int val_2 = fromString<int>( value_f );
Change to

int val_e = fromString<int>( value_f, hex );
cout << "val_2 is [" << val_2 << "]" << std::hex << endl;

}


HTH

V
Jul 22 '05 #2
"Victor Bazarov" <v.********@comAcast.net> wrote in message news:<ZSDfd.253989$wV.7201@attbi_s54>...
"ma740988" <ma******@pegasus.cc.ucf.edu> wrote...

int main()
{

int d(0xAFFF);
string value_d = toString( d );
cout << "value_d is [" << value_d << "]" << endl;

string value_e( " 4999 " );
string value_f( " 0xAFFF " );

int val_1 = fromString<int>( value_e );
cout << "val_1 is [" << val_1 << "]" << endl;
int val_2 = fromString<int>( value_f );


Change to

int val_e = fromString<int>( value_f, hex );
cout << "val_2 is [" << val_2 << "]" << std::hex << endl;

}


HTH

V

Beautiful. One question though (Haven't gotten through Langer/Kreft)
oct doesn't co-operate

template<typename T>
T fromString(const std::string& s,
std::ios_base& (*f)(std::ios_base&) = std::dec)
{
std::istringstream is(s);
T t;
is >> f >> t;
return t;
}

string value_e( " 4999 " );
int val_e = fromString<int>( value_e, oct);
The output is 4.
Jul 22 '05 #3
ma740988 wrote:
[..] One question though (Haven't gotten through Langer/Kreft)
oct doesn't co-operate

template<typename T>
T fromString(const std::string& s,
std::ios_base& (*f)(std::ios_base&) = std::dec)
{
std::istringstream is(s);
T t;
is >> f >> t;
return t;
}

string value_e( " 4999 " );
int val_e = fromString<int>( value_e, oct);
The output is 4.


'9' is not a valid input for the octal converter, is it?

V
Jul 22 '05 #4
Victor Bazarov <v.********@comAcast.net> wrote in message news:<i5***************@newsread1.dllstx09.us.to.v erio.net>...
ma740988 wrote:
[..] One question though (Haven't gotten through Langer/Kreft)
oct doesn't co-operate

template<typename T>
T fromString(const std::string& s,
std::ios_base& (*f)(std::ios_base&) = std::dec)
{
std::istringstream is(s);
T t;
is >> f >> t;
return t;
}

string value_e( " 4999 " );
int val_e = fromString<int>( value_e, oct);
The output is 4.


'9' is not a valid input for the octal converter, is it?

V


Ah!!! Being 'wrapped up in the stream' , I overlooked that, however it
gets interesting. First, I'm assuming that the stream modifier
std::oct is what you're referring to as the octal converter? Now i
need to grab my text for a refresher but I conclude - based on your
reply - that the conversion is predicated upon passing single digit to
the converter. IOW 4 is passed to the converter, then 9 and so on.

Now, heres a case where the 'octal converter/stream modifier(?)'
produced the desired output which refutes my prior conclusion.

int idx(4999);
cout << oct << idx << endl;
Jul 22 '05 #5
ma740988 wrote:
Victor Bazarov <v.********@comAcast.net> wrote in message news:<i5***************@newsread1.dllstx09.us.to.v erio.net>...
ma740988 wrote:
[..] One question though (Haven't gotten through Langer/Kreft)
oct doesn't co-operate

template<typename T>
T fromString(const std::string& s,
std::ios_base& (*f)(std::ios_base&) = std::dec)
{
std::istringstream is(s);
T t;
is >> f >> t;
return t;
}

string value_e( " 4999 " );
int val_e = fromString<int>( value_e, oct);
The output is 4.


'9' is not a valid input for the octal converter, is it?

V

Ah!!! Being 'wrapped up in the stream' , I overlooked that, however it
gets interesting. First, I'm assuming that the stream modifier
std::oct is what you're referring to as the octal converter? Now i
need to grab my text for a refresher but I conclude - based on your
reply - that the conversion is predicated upon passing single digit to
the converter. IOW 4 is passed to the converter, then 9 and so on.

Now, heres a case where the 'octal converter/stream modifier(?)'
produced the desired output which refutes my prior conclusion.

int idx(4999);
cout << oct << idx << endl;


'oct', like 'dec' or 'hex', control how the string is converted to and
from the internal representation. Those format flags are bi-directional.

You can think of it that they turn on certain converters in the stream.
Once you say 'oct', the next string is interpreted as octal if you input
or the next number is output in the octal form if you output. Converters
are bi-directional too.

V
Jul 22 '05 #6
Victor Bazarov <v.********@comAcast.net> wrote in message news:<i5Ofd.7225

I'm using google as a newsreader (too cheap right now) and as a result
I dont see your responses momentarily.
In any event, after seeing your use of the fuction pointer that
returns a reference to ios_base. I went back and retrofitted some
'old' code to do the same.
One things that's puzzled me in the past (string related) is the
results of the program below. The output is 0 when i expect 0x00.
0xFF, etc. works fine.
//PARAMETERIZED OVER CHARACTER AND NUMERIC TYPE TO BE CONVERTED
template <typename CT, typename T>
std::basic_string<CT> convertToStr(const T& t, std::ios_base &
(*f)(std::ios_base&), const std::streamsize precision)
{
std::basic_ostringstream<CT> oss;
oss.setf(std::ios::showbase);
oss << std::fixed << std::setprecision(precision)<< f << t;
return oss.str();
};

int main()
{
cout << convertToStr<char>(0x00, std::hex, 0) << endl;
}
Jul 22 '05 #7
ma740988 wrote:
Victor Bazarov <v.********@comAcast.net> wrote in message news:<i5Ofd.7225

I'm using google as a newsreader (too cheap right now) and as a result
I dont see your responses momentarily.
In any event, after seeing your use of the fuction pointer that
returns a reference to ios_base. I went back and retrofitted some
'old' code to do the same.
One things that's puzzled me in the past (string related) is the
results of the program below. The output is 0 when i expect 0x00.
0xFF, etc. works fine.
I am not surprised. The conversion to hex is done precisely as if it
were done by 'printf'. Since 'printf' never prepends 0 with 0x, neither
does the ostream. The C Standard says that only a non-zero value will
be prefixed with 0x. If you want _all_ values to be prefixed, you should
(a) drop the 'showbase' and (b) add "0x" for the hex.


//PARAMETERIZED OVER CHARACTER AND NUMERIC TYPE TO BE CONVERTED
template <typename CT, typename T>
std::basic_string<CT> convertToStr(const T& t, std::ios_base &
(*f)(std::ios_base&), const std::streamsize precision)
{
std::basic_ostringstream<CT> oss;
oss.setf(std::ios::showbase);
oss << std::fixed << std::setprecision(precision)<< f << t;
return oss.str();
};

int main()
{
cout << convertToStr<char>(0x00, std::hex, 0) << endl;
}

V
Jul 22 '05 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
by: Ensoul Chee | last post by:
I used #include <iostream.h> int m; cout << "Hexadecimal == 0x" << hex << m << endl; to print value of m in hexadecimal mode. But I got the compile error like this couttest.cpp:20 `hex'...
8
by: johnsocs | last post by:
How do you validate the following XML document, I'm having problems with element 'one' with the attribute xsi:type="xsd:string" <?xml version="1.0" encoding="UTF-8"?> <zero...
1
by: Kashish | last post by:
Is file<<"Some string"<<endl is an atomic operation. where file is an ofstream object. If we output a string in ofstream and we provide endl after that,Can we make sure the whole string will be...
0
by: Andrew Burgher | last post by:
Feeding the following .xsd into the XsdObjectGen (v1.4.2.0) tool produces an invalid attribute: with DataType="System.String". Has anybody seen this behaviour before? Is this a bug in...
3
by: Andy Sutorius via DotNetMonster.com | last post by:
Hi, I have a Sorted List that has 9 key/value pairs. I am trying to take one of the key/value pairs and store the value of that key into a string variable. However, the value that actually gets...
17
by: Petyr David | last post by:
Just looking for the simplest. right now my perl script returns an error messge to the user if the date string is invalid. would like to do this before accessing the server. TX
1
by: Ducknut | last post by:
Not so much a problem as a discussion. I am currently in the early stages of designing a database to hold a bunch of water quality data (e.g., concentrations of heavy metals in drinking water). Water...
10
by: R2d2Rabeau | last post by:
Hi, I'm new to C#, please be patient :-) I am trying to pass an Arraylist (myAL) to a jagged array (myAL2) . The problem I have is that when I write the values to a file i do not get the values...
1
by: mato81 | last post by:
Hi all! I am a newbie to WSDL. I have a questions which has been driving me crazy... If I would have a WSDL with a types element somewhat like below, what is the point of the third last row...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.