C ++字符ASCII值为字符串

时间:2013-07-31 19:35:31

标签: c++

非常基本的问题。我在将char转换为指向实际角色的char*时遇到问题。谷歌搜索产生了关于strcpy,string,sprintf等的信息。经过多次尝试解决问题的尝试,我仍然无法让它工作。

我有一个字符数组recv_msg,其中包含我需要的字符的ASCII值。我需要将字符(而不是值)存储在向量msg中。

我有什么:

std::vector<char> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(recv_msg[i]);
}
// Problem: when I process my msg I see 49 instead of '1'.

如果我执行以下操作作为完整性检查,我确实得到了我需要的行为。也就是说,我看到的是'5'而不是53(5的ASCII码)。

std::vector<char*> msg;
...
int i;
char *val;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(val);
}
// No problem: when I process my msg I see '5' instead of 53.

所以我需要将ASCII码值(char)转换为它们的字符表示(char *)。我该怎么做呢?

我想在这个阶段解决问题,而不必做ASCII - &gt;处理邮件时的字符转换。

3 个答案:

答案 0 :(得分:2)

char只是一个数字,所以如果您将其视为53而不是'5',那就是因为您正在显示它。

您可以更改为将传入的消息存储为字符串,例如:

std::vector<std::string> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(std::string(&recv_msg[i], 1));
}

但如果真的只有单个字符,这似乎效率低下。另一种方法是在你对角色“做某事”时转换为字符串,例如:

std::string str(&msg.back(), 1);

甚至:

char str[2];
str2[0] = msg.back();
str2[1] = '\0';

答案 1 :(得分:1)

基于您的

“我需要将字符(而不是值)存储在矢量msg”

请尝试以下操作,btw ASCII 53仅为'5',可能只是您的recv_msg商店ascii值。

std::vector<char> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(recv_msg[i] - '0'); //Subtract 48 from numerals, 
}

答案 2 :(得分:1)

charchar *之间的差异与字符的表示及其数字表示完全无关。

使用ASCII:

printf("%c\n", '5');

为您提供5和:

printf("%d\n", '5');

给你53。它始终以存储作为53,将其转换为可打印的5字符只是您选择如何输出它的问题 - 您无法“存储字符(不是值)“,因为值总是存储的。即使您在源代码中编写'5',您的编译器也会将其转换为53,即:

if ( '5' == 53 ) {
    puts("This will always print.");
}