I'm just learning C++ and am trying to write a program that will take in inputs from char* argv[]
and process them.
Each argv[]
will be 6 hexadecimal, eg 1A2B3C
I have a char
array - char message[3]
and I'm trying to put 1A
into message[0]
, 2B
into message[1]
, and 3C
into message[2]
.
I understand argv
is kind of like a 2D array, so if my command line is:
./test 2 1A2B3C 4D5E6F
argv[2][0]
would give me '1' and argv[2][1]
would give me 'A'
but I don't know how to read 2 char
together and put them into the char
array.
Can anyone point me in the right direction?
If the main function is declared like this
int main(int argc, char *argv[])
Calling
./test 1A2B3C 4D5E6F
will result in an argv array which looks similiar to
In argv
So for the example
To extract sub-strings from the arguments
Try this example code
#include <iostream>
#include <stdlib.h> //required for string to int conversion
int main(int argc, char *argv[]) {
std::cout << "executable= " << argv[0] << std::endl;
for (int i=1; i<argc; i++) {
std::string s(argv[i]); //put char array into a string
std::cout << "arg["<<i<<"]="<<s<<std::endl;
for (int j=0; j<6; j+=2) {
std::string byteString = s.substr(j, 2);
char byte = (char) strtol(byteString.c_str(), NULL, 16);
std::cout << "byteString= "<<byteString << " as integer= "<<(int)byte<<std::endl;
}
}
}
Calling "./test 1A2B3C 4D5E6F" outputs
executable= /home/user/test
arg[1]=1A2B3C
byteString= 1A as integer= 26
byteString= 2B as integer= 43
byteString= 3C as integer= 60
arg[2]=4D5E6F
byteString= 4D as integer= 77
byteString= 5E as integer= 94
byteString= 6F as integer= 111
Alternatively, if the command line arguments could already be split, ie
"./test 1A 2B 3C 4D 5E 6F"
The substring extraction can be avoided.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.