Velocity Reviews > data conversion

# data conversion

andrewjj20
Guest
Posts: n/a

 11-23-2003
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

Jack Klein
Guest
Posts: n/a

 11-24-2003
On Sun, 23 Nov 2003 19:03:11 GMT, andrewjj20 <(E-Mail Removed)>
wrote in comp.lang.c:

> 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

andrewjj20
Guest
Posts: n/a

 11-30-2003
Jack Klein wrote:
> On Sun, 23 Nov 2003 19:03:11 GMT, andrewjj20 <(E-Mail Removed)>
> wrote in comp.lang.c:
>
>
>>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.
>

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

 Thread Tools

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post xhtml champs Python 0 06-21-2011 11:59 AM PSD to XHTML Conversion Services and PSD to HTML CSS Conversion Services, PSD to Joomla, Drupal, Wor VHDL 0 04-25-2011 06:43 AM subramanian100in@yahoo.com, India C++ 2 09-15-2009 12:46 PM egsdar ASP .Net 0 12-13-2008 01:40 PM luna ASP .Net 1 02-13-2004 01:15 PM

Advertisments