test

Files at this revision

API Documentation at this revision

Comitter:
yuto17320508
Date:
Fri Feb 15 09:57:11 2019 +0000
Commit message:
bit

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	Fri Feb 15 09:57:11 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	Fri Feb 15 09:57:11 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