[英]Not able to print the char array as thought
#include <fstream>
#include<iostream>
#include<cstring>
using namespace std;
class Address {
public:
char addr[6];
Address() {}
Address(string address) {
size_t pos = address.find(":");
int id = stoi(address.substr(0, pos));
short port = (short)stoi(address.substr(pos + 1, address.size()-pos-1));
memcpy(addr, &id, sizeof(int));
memcpy(&addr[4], &port, sizeof(short));
}
};
enum MsgTypes{
JOINREQ,
JOINREPLY,
DUMMYLASTMSGTYPE,
HEARTBEAT
};
/**
* STRUCT NAME: MessageHdr
*
* DESCRIPTION: Header and content of a message
*/
typedef struct MessageHdr {
enum MsgTypes msgType;
}MessageHdr;
typedef struct en_msg {
// Number of bytes after the class
int size;
// Source node
Address from;
// Destination node
Address to;
}en_msg;
//class Testing{
void send(Address *myaddr, Address *toaddr, char *data, int size);
int main()
{
MessageHdr *msg=new MessageHdr();
size_t msgsize = sizeof(MessageHdr) + sizeof(Address) + sizeof(long) + 1;
msg=(MessageHdr *)malloc(msgsize*sizeof(char));
int id=233;
short port =22;
long heartbeat=1;
msg=(MessageHdr *)malloc(msgsize*sizeof(char));
string s=to_string(id)+":"+to_string(port);
string s1=to_string(id+1)+":"+to_string(port+1);
cout<<s<<'\n';
cout<<s1<<'\n';
Address *addr= new Address(s);
for (int i = 0; i < 6; i++)
cout << addr->addr[i];
Address *toaddr= new Address(s1);
msg->msgType = JOINREQ;
//cout<<(char *)msg->msgType;
memcpy((char *)(msg+1), addr, sizeof(addr));
memcpy((char *)(msg+1) + 1 + sizeof(addr), &heartbeat, sizeof(long));
send(addr, toaddr, (char *)msg, msgsize);
return 0;
}
void send(Address *myaddr, Address *toaddr, char *data, int size) {
cout<<"inside send"<<'\n';
en_msg *em;
//static char temp[2048];
em = (en_msg *)malloc(sizeof(en_msg) + size);
em->size = size;
memcpy(&(em->from), &(myaddr), sizeof(em->from));
memcpy(&(em->to), &(toaddr), sizeof(em->from));
memcpy(em + 1, data, size);
cout<<(char *)(em+1);
}
這是我的程序,在這段時間里,我試圖檢查該地址在char數組中存儲了什么。 但是在打印數組時,它會給出一些奇怪的輸出。 在打印出s和s1的值后,出現兩個奇怪的符號。 我正在嘗試將id:port存儲在地址類的char數組中,但看起來沒有成功。 請幫忙
我要打印的代碼在主要功能中。 主功能向下大約十行。
例如,我的ID是233,端口是22,地址是233:22,我想找回233:22並打印出來。 我該怎么辦?
提前致謝 :)
問題在這一行:
cout << addr->addr[i];
由於addr->addr
是char
數組,因此每個元素都將addr->addr
表示的字符進行打印。 如果要打印每個整數值,只需將其首先轉換為int
。
cout << static_cast<int>(addr->addr[i]); // or old-fashioned: (int)addr->addr[i];
給出以下代碼:
for (int i = 0; i <= 6; i++)
cout << addr->addr[i];
並給定Address
的構造函數:
size_t pos = address.find(":");
int id = stoi(address.substr(0, pos));
short port = (short)stoi(address.substr(pos + 1, address.size()-pos-1));
memcpy(addr, &id, sizeof(int));
memcpy(&addr[4], &port, sizeof(short));
很明顯,您正在打印符合數字的字節
addr->addr
是一個char數組,包含兩個整數變量,一個具有兩個字節(int),另一個具有2個字節(short)。
因此,如果數字為,假設是436,則您正在打印:
0xB4 0x01 0x00 0x00
<crazy char> SOH NULL NULL
您必須了解要打印的內容或要打印的內容才能正確打印。
注意:此處假設是最受歡迎的設置,這意味着:
更新
如何獲取地址和端口:
int address;
unsigned short port;
memset(&address, addr->addr, 4);
memset(&port, addr->addr+4, 2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.