首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java到C/C++(硬体c/c++)的对话

java到C/C++(硬体c/c++)的对话
EN

Stack Overflow用户
提问于 2012-08-06 21:30:45
回答 2查看 152关注 0票数 1

在Java中:

取值= 1122;

代码语言:javascript
复制
public static final byte[] intToByteArray(int value) {
        return new byte[] {
                (byte)(value >>> 24),
                (byte)(value >>> 16),
                (byte)(value >>> 8),
                (byte)value};
    }

  public static int byteArrayToInt(byte[] data) {
        return (int)(
                (int)(0xff & data[0]) << 24  |
                (int)(0xff & data[1]) << 16  |
                (int)(0xff & data[2]) << 8   |
                (int)(0xff & data[3]) << 0
        );
    }

在这里它将返回0,0,4,98,所以在C中:

代码语言:javascript
复制
char* intToByteArray(int value){
        char* temp = new char[4];
         temp[0] = value >> 24,
         temp[1] = value >> 16,
         temp[2] = value >> 8, 
         temp[3] = value;
         return temp;
} 

因为在c中没有字节数据类型,我们可以使用char*代替它,但是当我返回temp值时,我得到的是null,所以我检查了如下的值,其中= b\x04 'b'= 98,x04 =4我不能获得为零的数据,所以当我转换回时,我应该如何管理剩余的值??

代码语言:javascript
复制
         char* where = new char[10];
         where[0] = temp[3];
         where[1] = temp[2];
         where[2] = temp[1];
         where[3] = temp[0];
         where[4] = 0;
EN

回答 2

Stack Overflow用户

发布于 2012-08-06 21:36:56

我得到的是null

不,你不是。您将获得第一个字节,它是一个\0 nul字节。当您将其打印为文本字符串时,它将终止该字符串。但它不是一个字符串,它是一个字节数组。

如果你得到的是NULL,你会得到一个分段错误或者类似的错误。

票数 3
EN

Stack Overflow用户

发布于 2012-08-06 22:14:41

虽然上面的帖子是绝对正确的,但您的移植工作还有一个更严重的问题。您的java生成

代码语言:javascript
复制
[ 0, 0, 4, 98 ]

当你的C语言产生

代码语言:javascript
复制
[ 98, 4, 0, 0 ]

代码不会像这样简单地转换。不管硬件是什么,Java都是高字节顺序的,但是你的C(++)毫不奇怪是低字节顺序的。更糟糕的是,你不能保证每次都是这样。有了硬质合金,我猜你可以完美地偶然发现一个大的endian架构(一些手臂?不是该领域的专家)。因此,您必须使用detect endian-ness of your Carbide platform或,将位移位替换为递增的模256。取决于调用函数的频率。Modulo将认真地处理更多的处理器工作,但并不关心字节顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11829301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档