data conversion

A

andrewjj20

I have a program producing data as a double somehow I need to get red of
the decimal and convert it to a short, and then conver that to a char to
be read to /dev/dsp as 16-bit audio data.

andrewjj20
 
J

Jack Klein

I have a program producing data as a double somehow I need to get red of
the decimal and convert it to a short, and then conver that to a char to
be read to /dev/dsp as 16-bit audio data.

andrewjj20

double d;
char c;

/* do something to produce a value in d */

c = d;

Assigning a floating point value to any integer type truncates the
fractional part.

But if the whole number part of the floating point type is outside the
range of values of the integer type, the result is undefined behavior.

Assuming that plain char is signed on your system, the assignment will
do exactly what you want as long as d is greater than -128.0 and less
than +128.0. If the double value is outside the range of a char, you
need to do something about that first.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++ ftp://snurse-l.org/pub/acllc-c++/faq
 
A

andrewjj20

Jack said:
double d;
char c;

/* do something to produce a value in d */

c = d;

Assigning a floating point value to any integer type truncates the
fractional part.

But if the whole number part of the floating point type is outside the
range of values of the integer type, the result is undefined behavior.

Assuming that plain char is signed on your system, the assignment will
do exactly what you want as long as d is greater than -128.0 and less
than +128.0. If the double value is outside the range of a char, you
need to do something about that first.
currently here is the code that I am using to change a short into signed
16-bit data:

short int t = data[a];
unsigned char high = t >> 8;
unsigned char low = t;
buf[2*a]=low;
buf[2*a+1]=high;

it was in a for loop and buf is an unsigned char array.

andrewjj20
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,008
Latest member
HaroldDark

Latest Threads

Top