char类型与int类型之间如何转换?

liounzhou 2005-02-25 05:42:13
发送数据时,int类型需要转换到char类型。另一端接收后还需要将char类型转换回int.
另外,在int转换成char时,是否可以指定char的长度?
...全文
496 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsys2 2005-02-27
  • 打赏
  • 举报
回复
原来你问的是这个啊:

WINSOCKET API 函数:

inet_ntoa

The Windows Sockets inet_ntoa function converts a network address into a string in dotted format.

char FAR * inet_ntoa (

struct in_addr in
);


Parameters

in

[in] A structure which represents an Internet host address.



Remarks

This function takes an Internet address structure specified by the in parameter. It returns an ASCII string representing the address in ".'' notation as "a.b.c.d''. Note that the string returned by inet_ntoa resides in memory which is allocated by Windows Sockets. The application should not make any assumptions about the way in which the memory is allocated. The data is guaranteed to be valid until the next Windows Sockets function call within the same thread, but no longer.

Return Values

If no error occurs, inet_ntoa returns a char pointer to a static buffer containing the text address in standard ".'' notation. Otherwise, it returns NULL. The data should be copied before another Windows Sockets call is made.

See Also

inet_addr

The Windows Sockets inet_addr function converts a string containing an Internet Protocol dotted address into an in_addr.

unsigned long inet_addr (

const char FAR * cp
);


Parameters

cp

[in] A null-terminated character string representing a number expressed in the Internet standard ".'' notation.



Remarks

This function interprets the character string specified by the cp parameter. This string represents a numeric Internet address expressed in the Internet standard ".'' notation. The value returned is a number suitable for use as an Internet address. All Internet addresses are returned in IP's network order (bytes ordered from left to right).
Internet Addresses
Values specified using the ".'' notation take one of the following forms:
a.b.c.d a.b.c a.b a

When four parts are specified, each is interpreted as a byte of data and assigned, from left to right, to the four bytes of an Internet address. Note that when an Internet address is viewed as a 32-bit integer quantity on the Intel architecture, the bytes referred to above appear as "d.c.b.a''. That is, the bytes on an Intel processor are ordered from right to left.



Note The following notations are only used by Berkeley, and nowhere else on the Internet. In the interests of compatibility with their software, they are supported as specified.



When a three part address is specified, the last part is interpreted as a 16-bit quantity and placed in the right most two bytes of the network address. This makes the three part address format convenient for specifying Class B network addresses as "128.net.host''.
When a two part address is specified, the last part is interpreted as a 24-bit quantity and placed in the right most three bytes of the network address. This makes the two part address format convenient for specifying Class A network addresses as "net.host''.

When only one part is given, the value is stored directly in the network address without any byte rearrangement.

Return Values

If no error occurs, inet_addr returns an unsigned long containing a suitable binary representation of the Internet address given. If the passed-in string does not contain a legitimate Internet address, for example if a portion of an "a.b.c.d" address exceeds 255, inet_addr returns the value INADDR_NONE.
cczlp 2005-02-26
  • 打赏
  • 举报
回复
char str[80];
int SendNum = 100;

sprintf(str, "%d", SendNum);

str 就是你需要的
liounzhou 2005-02-26
  • 打赏
  • 举报
回复
icwin 2005-02-26
  • 打赏
  • 举报
回复
up
liounzhou 2005-02-26
  • 打赏
  • 举报
回复
我也知道这听上去有点奇怪.不过,服务器与客户端之间是有通信协议的.比如:要求发送的包第一个字段是长为4个字节的Int类型.我查过Windows API里的Socket发送函数,
int send (
SOCKET s,
const char FAR * buf,
int len,
int flags
);
即使是int型也必须做转换.
netsys2 2005-02-26
  • 打赏
  • 举报
回复
晕,你都不知道对方是如何转换的,你怎么去变化?

服务器端和客户端在通信协议和数据转换上必须一致!
liounzhou 2005-02-25
  • 打赏
  • 举报
回复
这里用的是存储空间共享的方式。但我现在的情况是:数据的发送端是我写,是int转成char;但服务端是远程网关,其代码是我无法控制的。
netsys2 2005-02-25
  • 打赏
  • 举报
回复

union x{
short int i;
char c[2];
}intToChar;

intToChar itc;

itc.i = 12345;
itc.c就是你要的char.


反过来:

itc.c[0] = 1;
itc.c[1] = 2;

itc.i就是你要的int.


注意这里是short int,如果是int:

union x{
short int i;
char c[4];
}intToChar;

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧