【问题标题】:changing a hexadecimal array at a particular index在特定索引处更改十六进制数组
【发布时间】:2015-03-11 11:28:45
【问题描述】:
// if i received from a systemA 
            else if(test_addr.sin_addr.s_addr == systemA_addr.sin_addr.s_addr){ 
                    if(CHECK_STATUS ==0){
                    sendto(sock, ca, bytes_read, 0, (struct sockaddr *)&CSS_addr, sizeof(CSS_addr)); 
                    memcpy(last_systemA_msg, ca, sizeof(ca));
                    memset(ca,0,BUFLEN);                
                    for (j = 0; j < bytes_read; ++j) {
                        printf("%02x", last_systemA_msg[j]);  //02x
                    }
                    printf("\n");
                }
            }

                if(CHECK_STATUS ==1 && (strcmp(rcvd_ASR_msg,"MESSAGE_RCVD") == 0)){
                    last_systemA_msg[16] = 0x05;
                    sendto(sock, last_systemA_msg, bytes_read,0,(struct sockaddr *)&CSS_addr, sizeof(CSS_addr));
                    printf("The data is modified\n");
                    for (k = 0; k < bytes_read; ++k) {
                        printf("%02x", last_systemA_msg[k]);  //02x
                    }
                    printf("\n");
                }

我得到了第一部分的输出

            65210014a80d010101000001000000000000000000000000000

我需要修改这些数据,因为它们是十六进制的,所以我这样做了..

我应该期望数据被修改为

            65210014a80d010101000001000000050000000000000000000

然后我需要通过套接字发送这个完整的数据。

但我明白了-- ???

            The data is modified
            65210014230f01010100000100000000
            65210014240f01010100000100000000000000000000000000

为什么我的数据没有被修改,虽然我改变了那个位置的值?为什么长度和原始数据不一样?

【问题讨论】:

  • 您确定您使用的是ox05 而不是0x05
  • 您显示的数据中不知何故多了一个字符(两个到几个)。注意第二个“长”字符序列与其他两个“长”字符序列的长度。
  • 这个问题不清楚也不准确。这不是一个猜谜游戏。说出你的问题,然后阅读它并想象你不知道它是关于什么的。然后问自己:我得到这个人想要知道的东西了吗?
  • 您的最后两个示例不是相同的数据。一个包含子字符串230f,另一个包含240f。在您的代码中,以 if(CHECK_STATUS ==1 ... 开头的第二部分虽然缩进,但不在前面以 else if 开头的代码块内,它不一定会被执行。
  • @alk 很抱歉造成混乱,我复制错误,所以有些位丢失了。 #Weather 提到的问题实际上导致了问题。谢谢

标签: c arrays sockets hex


【解决方案1】:

您的最后两个示例不是相同的数据。一个包含子字符串230f,另一个包含240f。在您的代码中,以 if(CHECK_STATUS ==1 ... 开头的第二部分虽然缩进,但不在前面以 else if 开头的代码块内,它不一定会被执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2018-05-17
    • 2015-09-13
    相关资源
    最近更新 更多