//------------------------------------------------------------------------------------------//
// divisionAlg -- This will take the incoming value and "asciify" each byte according to
// a character lookup table
//
// Parameters:
// unsigned int value -- the value to be asciified
//
//------------------------------------------------------------------------------------------//
void divisionAlg(unsigned int value);
int main(int argc, char *argv[]) // Always remember to pass an argument while executing
{
divisionAlg(45);
}
void divisionAlg(unsigned int value)
{
int MAX_REM=2;
int MAX_BASE=10;
const char *charTable = {"0123456789ABCDEF"}; // lookup table for converting remainders
char rembuf[MAX_REM + 1]; // holds remainder(s) and provision null at the end
int index; //
int i; // loop variable
unsigned int rem; // remainder
unsigned int base; // we'll be using base 10
ssize_t numWritten; // holds number of bytes written from write() system call
base = 10;
// validate base
if (base < 2 || base > MAX_BASE)
err_sys("oops, the base is wrong");
// For some reason, every time this method is called after the initial call, rembuf
// is magically filled with a bunch of garbage; this just sets everything to null.
// NOTE: memset() wasn't working either, so I have to use a stupid for-loop
for (i=0; i<MAX_REM; i++)
rembuf[i] = '\0';
rembuf[MAX_REM] = 0; // set last element to zero
index = MAX_REM; // start at the end of rembuf when adding in the remainders
do
{
// calculate remainder and divide valueBuff by the base
rem = value % base;
value /= base;
// convert remainder into ASCII value via lookup table and store in buffer
index--;
rembuf[index] = charTable[rem];
} while (value != 0);
// display value
if ((numWritten = write(STDOUT_FILENO, rembuf, MAX_REM + 1)) == -1)
err_sys("something went wrong with the write");
} // end of divisionAlg()
除算アルゴリズムを作成しようとしていますが、なぜ機能しないのかわかりません。助けてください!
この「除算 alg」は、着信値を取得し、文字ルックアップ テーブルに従って各バイトを「asciify」することが想定されています。