a
Revision 0:ef757693b9f8, committed 2019-02-20
- Comitter:
- yuto17320508
- Date:
- Wed Feb 20 04:30:28 2019 +0000
- Commit message:
- sorry
Changed in this revision
splitData.cpp | Show annotated file Show diff for this revision Revisions of this file |
splitData.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/splitData.cpp Wed Feb 20 04:30:28 2019 +0000 @@ -0,0 +1,48 @@ +/*intの数をchar型の欲しいbyte数に変換*/ +#include "splitData.h" +#include <cstdlib> +#include "math.h" + + +//////////////Intobyte内の関数 +void limitDataForByte(int data,int byte);//指定のbyteで送れる量に制限. +void SplitToAbsData(int wannaChange,int byte,char *candata,int firstElement);//絶対値をcharに分解 +void PutSignInTheLeft(int wannaChange,int byte,char *candata,int firstElement); +int Intsign(int num);//int型の数の符号を返す関数。正なら1,負なら-1 + + +void Intobyte(int wannaChange,int byte,char *candata,int firstElement)//指定されたbyte数のchar型に分解.一番左に符号 +{ + limitDataForByte(wannaChange, byte); + SplitToAbsData(wannaChange,byte,candata,firstElement); + PutSignInTheLeft(wannaChange,byte,candata,firstElement); +} + + +void limitDataForByte(int data,int byte)//指定のbyteで送れる量に制限. +{ + int limit=1<<(8*byte-1); //一番左に1 + if( abs(data) >= limit) { + data=Intsign(data)*(limit-1); + } + +} + +//絶対値をcharに分解 +void SplitToAbsData(int wannaChange,int byte,char *candata,int firstElement) +{ + int absdata = abs(wannaChange); + for(int i=0; i<byte; i++) + candata[i+firstElement]=(absdata>>8*i)&255; +} +void PutSignInTheLeft(int wannaChange,int byte,char *candata,int firstElement) +{ + if(wannaChange<0) { + int lastElement=firstElement+byte-1; + candata[lastElement]+=128; + } +} +int Intsign(int num)//int型の数の符号を返す関数。正なら1,負なら-1 +{ + return (num>0)-(num<0); //num>0の時(num>0)=1,num<=0で(num>0)=0であることを利用。 +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/splitData.h Wed Feb 20 04:30:28 2019 +0000 @@ -0,0 +1,14 @@ +/*intの数をchar型の欲しいbyte数に変換*/ + +#ifndef __INCLEDED_SPRITDATA_H +#define __INCLEDED_SPRITDATA_H + +void Intobyte(int wannaChange,int byte,char *chardata,int firstElement); +//指定されたbyte数のchar型に分解.最初の配列に下八桁が入る。一番左に符号(正だと0,負だと1)。 + +//例 wantChangeという変数の下23桁(3バイト)を、charnum[5]から順に入れたい。 +// →Intobyte(wantChange,3,charnum,5); +//これでcharnum[5]にwantChangeの下八桁,でcharnum[6]に下16桁、charnum[7]に下23桁が入り、charnum[7]の一番左に符号が入る。 + + +#endif