Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1007815
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T08:40:32+00:00 2026-05-16T08:40:32+00:00

Hey all, I’m currently trying to write a compile-time string encryption (using the words

  • 0

Hey all, I’m currently trying to write a compile-time string encryption (using the words ‘string’ and ‘encryption’ quite loosely) lib.

What I have so far is as follows:

// Cacluate narrow string length at compile-time
template <char... ArgsT>
struct CountArgs
{
 template <char... ArgsInnerT> struct Counter;

 template <char Cur, char... Tail>
 struct Counter<Cur, Tail...>
 {
  static unsigned long const Value = Counter<Tail...>::Value + 1;
 };

 template <char Cur>
 struct Counter<Cur>
 {
  static unsigned long const Value = 1;
 };

 static unsigned long const Value = Counter<ArgsT...>::Value;
};

// 'Encrypt' narrow string at compile-time
template <char... Chars>
struct EncryptCharsA
{
 static const char Value[CountArgs<Chars...>::Value + 1];
};

template<char... Chars>
char const EncryptCharsA<Chars...>::Value[CountArgs<Chars...>::Value + 1] =
{
 Chars...
};

However I can’t figure out how to perform operations on the characters as I expand them into the static array. I’d just like to execute a simple operation on each character (e.g. ‘(((c ^ 0x12) ^ 0x55) + 1)’ where c is the character).

A shove in the right direction would be greatly appreciated.

Thanks all.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T08:40:32+00:00Added an answer on May 16, 2026 at 8:40 am

    If you just want to operate on one character at a time its easy:

    template<char c> struct add_three {
        enum { value = c+3 };
    };
    
    template <char... Chars> struct EncryptCharsA {
        static const char value[sizeof...(Chars) + 1];
    };
    
    template<char... Chars>
    char const EncryptCharsA<Chars...>::value[sizeof...(Chars) + 1] = {
        add_three<Chars>::value...
    };
    
    int main() {   
        std::cout << EncryptCharsA<'A','B','C'>::value << std::endl;
        // prints "DEF"
    }
    

    Note that CountArgs is redundant (that’s what sizeof... is for) and that this uses element-wise transformation of the elements in a parameter-pack.


    To make the transformation dependent on previous results, one option would be to consume the characters recursively, one at a time, and incrementally build a new template from that:

    template<char... P> struct StringBuilder {
        template<char C> struct add_char {
            typedef StringBuilder<P..., C> type;
        };
    
        static const char value[sizeof...(P)+1];
    };
    
    template<char... P> const char StringBuilder<P...>::value[sizeof...(P)+1] = {
        P...
    };
    
    template<class B, char...> struct EncryptImpl;
    
    template<class B, char Seed, char Head, char... Tail> 
    struct EncryptImpl<B, Seed, Head, Tail...> {
        static const char next = Head + Seed; // or whatever
        typedef typename EncryptImpl<
            typename B::template add_char<next>::type,
            next, Tail...
        >::type type;
    };
    
    template<class B, char Seed> struct EncryptImpl<B, Seed> {
        typedef B type;
    };
    
    template<char... P> struct Encrypt {
        typedef typename EncryptImpl<StringBuilder<>, 0, P...>::type type;
    };
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Hey all! I am trying to post a file over Http using Java 1.4.2.
Hey all. Newbie question time. I'm trying to setup JMXQuery to connect to my
Hey all i am trying to search through a CSV file using the following
Hey all I'm trying to make a 3d game in with 2d sprite characters.
Hey All, I currently use Google's API to include jQuery into my sites like
Hey all this is the first time i am calling a stored procedure via
Hey all. I'm trying to set a value on a hidden form element based
Hey all, i am trying to learn how to insert a comment within some
Hey all, i am trying to get my bottom bar to center on the
Hey all i am trying to delete a key from the registery but i

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.