a

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers splitData.cpp Source File

splitData.cpp

00001 /*intの数をchar型の欲しいbyte数に変換*/
00002 #include "splitData.h"
00003 #include <cstdlib>
00004 #include "math.h"
00005 
00006 
00007 //////////////Intobyte内の関数
00008 void limitDataForByte(int data,int byte);//指定のbyteで送れる量に制限.
00009 void SplitToAbsData(int wannaChange,int byte,char *candata,int firstElement);//絶対値をcharに分解
00010 void PutSignInTheLeft(int wannaChange,int byte,char *candata,int firstElement);
00011 int Intsign(int num);//int型の数の符号を返す関数。正なら1,負なら-1
00012 
00013 
00014 void Intobyte(int wannaChange,int byte,char *candata,int firstElement)//指定されたbyte数のchar型に分解.一番左に符号
00015 {
00016     limitDataForByte(wannaChange, byte);
00017     SplitToAbsData(wannaChange,byte,candata,firstElement);
00018     PutSignInTheLeft(wannaChange,byte,candata,firstElement);
00019 }
00020 
00021 
00022 void limitDataForByte(int data,int byte)//指定のbyteで送れる量に制限.
00023 {
00024     int limit=1<<(8*byte-1); //一番左に1
00025     if( abs(data) >= limit) {
00026         data=Intsign(data)*(limit-1);
00027     }
00028 
00029 }
00030 
00031 //絶対値をcharに分解
00032 void SplitToAbsData(int wannaChange,int byte,char *candata,int firstElement)
00033 {
00034     int absdata = abs(wannaChange);
00035     for(int i=0; i<byte; i++)
00036         candata[i+firstElement]=(absdata>>8*i)&255;
00037 }
00038 void PutSignInTheLeft(int wannaChange,int byte,char *candata,int firstElement)
00039 {
00040     if(wannaChange<0) {
00041         int lastElement=firstElement+byte-1;
00042         candata[lastElement]+=128;
00043     }
00044 }
00045 int Intsign(int num)//int型の数の符号を返す関数。正なら1,負なら-1
00046 {
00047     return (num>0)-(num<0); //num>0の時(num>0)=1,num<=0で(num>0)=0であることを利用。
00048 }