a
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 22 2022 05:53:14 by
1.7.2