Solved

Question on C code, how to make this code more efficient

Posted on 2014-02-23
2
837 Views
1 Endorsement
Last Modified: 2014-02-27
Hi Guys,

I'm helping a friend making their C code more efficient for  encryption program. Do you guys have any ideas on what i can do/modify to make it more efficient and improve on the current code?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/time.h>

typedef int int32;
typedef unsigned char int8;

static void combine_it(int8  *output, int8  *input_1, const int8  *input_2, int32 length)
{
   int32 i = 0;

   for(i=0; i<length; i++)
   {
       output[i] = (int8)(input_1[i] ^ input_2[i]);
   }

   return;
}

static void itoa( int32 num, int8  *alpha, int32 radix )
{
   if( radix == 10 )
   {
       sprintf(alpha, "%i", num);
   }
   else if( radix == 16 )
   {
       sprintf(alpha, "%X", num);
   }
}

int8 *create_new_key(int8 modifier, const int8  *input_1, int32 length)
{
   int8  leading[3];
   int32 i_leading;
   int8 * temp_string = NULL;
   int8 * ret;
   int32 i = 0;

   itoa(modifier/2, leading, 10);
   i_leading = atoi(leading);
   temp_string = (int8 *) malloc(8);
   ret = (int8 *) malloc(length);
   memset(temp_string, 0, 8);
   temp_string[0] = 0; 

   if( (modifier+1)%2 == 0 ) {
       temp_string[0] = (int8)((i_leading<<4) + 8);
   }   
   else {
       temp_string[0] = (int8)(i_leading<<4);
   }   

   for(i=0; i<(length>>3); i++)
   {
       combine_it(ret+i*8, temp_string, input_1+i*8, 8);
   }   
   free(temp_string);
   return ret;
}   

// Do not change anything in main
// main only contains example input
// Change anything else
int main(int argc, char **argv) {

   // Example input data
   int8 data[32] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,
                    17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
   int8 *resp = create_new_key(0x10, data, sizeof(data));
   free(resp);

   return 0;
}

Open in new window

1
Comment
Question by:Tbalz
2 Comments
 
LVL 45

Assisted Solution

by:Kdo
Kdo earned 250 total points
ID: 39880804
Hi TBalz,

Are you experiencing a particular performance issue that you'd like resolved?

Today's compilers are very good at optimizing program source code into executable code.  You could rewrite the loops to use pointers and pointer arithmetic instead of integer arithmetic, but I doubt you'll see a difference.  Turn on the compiler optimizations to the fullest sill probably get you fast code than you can write yourself.


Kent
0
 
LVL 32

Accepted Solution

by:
phoffric earned 250 total points
ID: 39880884
Your combine_it() function is called once in a loop. You can replace the combine_it() function with just the code and remove the overhead of passing in 4 arguments.

Also, as kdo suggested, you can replace subscripting by using pointers directly.
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now