和我一起工作的实习生向我展示了他在计算机科学方面考试的关于字节序问题的考试.有一个问题显示ASCII字符串"My-Pizza",学生必须显示该字符串将如何在小端计算机的内存中表示.当然,这听起来像一个技巧问题,因为ASCII字符串不受端序问题的影响.
但令人震惊的是,实习生声称他的教授坚持认为该字符串将表示为:
P-yM azzi
Run Code Online (Sandbox Code Playgroud)
我知道这不可能是正确的.在任何机器上都不能像ASCII字符串那样表示ASCII字符串.但显然,教授坚持这样做.所以,我写了一个小C程序并告诉实习生把它交给他的教授.
#include <string.h>
#include <stdio.h>
int main()
{
const char* s = "My-Pizza";
size_t length = strlen(s);
for (const char* it = s; it < s + length; ++it) {
printf("%p : %c\n", it, *it);
}
}
Run Code Online (Sandbox Code Playgroud)
这清楚地表明字符串在内存中存储为"My-Pizza".一天后,实习生回到我身边,告诉我教授现在声称C正在自动转换地址,以正确的顺序显示字符串.
我告诉他他的教授很疯狂,这显然是错的.但是为了检查我自己的理智,我决定在stackoverflow上发布这个,所以我可以让其他人确认我在说什么.
所以,我问:谁在这里?
嘿伙计们,来自C/Networking新手的问题......
我在C中进行一些套接字编程,并试图解决字节顺序问题.我的请求(发送)很好,但是当我收到数据时,我的字节都乱了.我从这样的事情开始......
char * aResponse= (char *)malloc(512);
int total = recv(sock, aResponse, 511, 0);
Run Code Online (Sandbox Code Playgroud)
在处理这个响应时,每个16位字似乎都反转了它(我正在使用UDP).我试图通过做这样的事来解决这个问题......
unsigned short * _netOrder= (unsigned short *)aResponse;
unsigned short * newhostOrder= (unsigned short *)malloc(total);
for (i = 0; i < total; ++i)
{
newhostOrder[i] = ntohs(_netOrder[i]);
}
Run Code Online (Sandbox Code Playgroud)
当我将数据视为short时,这可以正常工作,但是如果我再次将指针转换为char,则字节会反转.我究竟做错了什么?
谢谢!