问题描述
这是我的代码:
#include <iostream>
#include <stdint.h>
using namespace std;
//converts high endian to little endian
uint32_t format(const char* &bytes)
{
return (uint32_t)((bytes[0] << 24) |
(bytes[1] << 16) |
(bytes[2] << 8) |
(bytes[3]));
}
uint32_t normal(const char* &bytes)
{
return (uint32_t)((bytes[3] << 24) |
(bytes[2] << 16) |
(bytes[1] << 8) |
(bytes[0]));
}
int main()
{
char bytes[4];
bytes[0]= 0x01;
bytes[1]= 0x23;
bytes[2]= 0x45;
bytes[3]= 0x67;
printf("0x%08x\n",normal(bytes);
printf("0x%08x\n",format(bytes);
}
我有一个大小为4的char数组,称为字节。字节中的每个元素都存储一个字节,我将其统称为32位无符号int。我的目标是将字节传递到format()中,这将返回数字的小字节序形式(以字节为单位)(当前存储在高字节序中)。 我的问题是,我想将数组作为引用传递,这样它就不会为函数参数创建额外的内存。不仅如此,我还想使它不能以字节为单位更改元素。为此,我尝试: uint32_t格式(const char *&bytes);并传递了这样的字节:format(bytes),但这给了我一个错误。
当我这样写时:uint32_t format(char * const&bytes),错误停止了,但这不是我想要的,因为这是对字符常量指针的引用,这意味着我无法更改指针本身,但我可以更改其指向的值。 我想要的是相反的:我想要一个指向常量字符的指针的引用,以便可以更改指针,但不能更改其指向的值。
最后,我想补充一点,我可以在没有引用的情况下轻松完成此操作,但是,正如我之前提到的,这将导致每次调用函数参数时都分配内存,这不是我想要的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)