这部分代码在做什么?

时间:2013-08-20 08:38:28

标签: c sockets networking ssl network-programming

我是c编程的新手。作为我的网络安全单一课程的一部分,我必须设计一个SSL握手模拟。我在网上找到了一个示例代码,但是我不了解代码的某些部分。你可以帮我跟进一下:

(char) 0做什么? (send_data定义为char send_data[1024];

send_data[0] = (char) 0;                //Packet Type = hello
send_data[1] = (char) 3;                //Version

编辑+关注

我知道什么类型的铸件。

我理解什么是演员但是我发布的代码什么也没做。即使整数0被转换为一个字符,它也没有做任何事情,因为当你打印它时 - 它是空白的 - 没有价值。

例如:

#include <stdio.h>
#include <stdlib.h>

int main(){

char test;
int num;

num = 1;
test = (char) num; // this does nothing

printf("num = %d , %c\n",num,num);
printf("test = %d , %c\n",test,test);

    // Isn't this the correct way to do it ?? :

num = 3;
test = '3'; // now this is a character 3

printf("num = %d , %c\n",num,num);
printf("test = %d , %c\n",test,test);

return 0;

}

上述代码的输出是:

num = 1 , 
test = 1 , 
num = 3 , 
test = 51 , 3

为什么要这样做?这不是正确的方法: - send_data [0] ='0'; send_data [1] ='3';

6 个答案:

答案 0 :(得分:6)

它只是将int 0(或3)转换为char类型。

可能没有必要,但可以用来删除可能截断的警告。

更好的习语是:

send_data[0] = '\x00';   // Packet Type = hello
send_data[1] = '\x03';   // Version

因为这些是明确的字符,而不必担心投射。

请注意,(char) 0(或'\x00''0'相同。前两个为您提供字符代码0(ASCII中的NUL字符),后者为您提供可打印 0字符的字符代码(字符代码48或{ ASCII中的{1}}。 那是为什么你的印刷没有像你期望的那样发挥作用。

您的特定协议是否需要代码点0或可打印字符0是您尚未明确的事情。如果您真的想要模拟SSLv3,那么正确的值是二进制而不是可打印的值RFC6101

'\x30'

答案 1 :(得分:1)

它只是将文字符号转换为char值。但我认为没有必要。

答案 2 :(得分:0)

int类型的char值为casting

答案 3 :(得分:0)

这称为type-conversioncasting。当您需要将一种数据类型的实体更改为另一种数据类型时,可以执行此操作。

在您的示例中,0和3(整数)被转换为类型字符。

http://en.wikipedia.org/wiki/Type_conversion

答案 4 :(得分:0)

send_data被定义为char的数组。但03是整数文字。将整数分配给数组时,它们将被转换为char。这意味着send_data [0]将保留ASCII值为0的字符,即NUL字符。 send_data[1]将保留ASCII值为3的字符end of text字符。

答案 5 :(得分:0)

int main() 
{ 
    char ch;
    ch = (char) 0;
    printf("%d\n", ch);   //This will print 0
    printf("%c\n", ch);   //This will print nothing (character whose value is 0 which is NUL)
    ch = (char) 3;
    printf("%d\n", ch);   //This will print 3
    printf("%c\n", ch);   //This will print a character whose value is 3
    return 0;
}

对于char类型,它是类型转换int类型。

    Its good to create a demo program and test it when you get some doubts while reading.