标签: protocol-buffers

Cmake无法运行shell命令

假设我们有一个包含一些子目录的项目,并且需要在其子目录之一中生成 .cpp 和 .h 文件。事实是:如果我们在该目录中运行命令(不带 < 和 >),它会生成有效文件。

那么如何使用 cmake 来做同样的事情呢?

Cmake有add_custom_command,但它什么也不做,所以我们不能使用它。execute_process 更好,因为它运行一些东西,但是以错误的方式运行。

execute_process(COMMAND "protoc -I=\".\" --cpp_out=\".\" protocol.proto"
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

不幸的是,结果什么也没有,因为 cmake 无法正确运行命令,因此“protoc”打印“No such file or directory”。

添加/编辑:此execute_process调用位于CMakeLists.txt中,该txt与protocol.proto文件位于同一目录中

为什么它不能简单地运行这个命令?

cmake protocol-buffers

0
推荐指数
1
解决办法
3081
查看次数

Protobuf 生成的类中的 newBuilder() 是否会创建一个新的 Java 对象?

是否newBuilder()创建一个新的Java对象?我的快速测试似乎并非如此。调用.hashcode()2个不同的对象,它具有相同的哈希码。

import com.mydomain.proto.users.api.User;

...

User a = User.newBuilder().setUserUuid("1111111111").build();
User b = User.newBuilder().setUserUuid("1111111111").build();

System.out.println("a hashcode: " + a.hashCode());
System.out.println("b hashcode: " + b.hashCode());

// assertNotEquals fails.
assertNotEquals(a.hashCode(), b.hashCode());


Run Code Online (Sandbox Code Playgroud)

将它们打印出来并看到哈希码是相同的,尽管我期待一个新的 Java 对象。

a hashcode: 611667980
b hashcode: 611667980

Run Code Online (Sandbox Code Playgroud)

注意,我们正在使用这个

'com.google.protobuf:protobuf-java-util:3.12.0'
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers protobuf-java

0
推荐指数
1
解决办法
3189
查看次数

我应该使用 Get 方法来获取值还是应该直接使用字段?

我第一次在 Go 中使用 protobuf(和 protoc)。

message MyProtoStruct {
  string description = 1;
}
Run Code Online (Sandbox Code Playgroud)

我有点困惑:

  1. 我应该使用方法来获取值(如MyProtoStruct.GetDescription())还是

  2. 我应该直接使用字段(如MyProtoStruct.Description)吗?

go protocol-buffers proto protoc

0
推荐指数
1
解决办法
137
查看次数

将 ByteArray 转换为 String 到 ByteArray

我想将 ByteArray 转换为字符串,然后将字符串转换为 ByteArray,但是在转换时值发生了变化。有人帮助解决这个问题。

人.proto:

syntax = "proto3";
  message Person{
    string name = 1;
    int32 age = 2;
  }
Run Code Online (Sandbox Code Playgroud)

sbt 编译后,它给出案例类 Person (编译时由 google protobuf 创建)

我的主课:

val newPerson = Person(
      name = "John Cena",
      age = 44                        //output
    )
    println(newPerson.toByteArray)    //[B@50da041d
    val l = newPerson.toByteArray.toString  
    println(l)                        //[B@7709e969
    val l1 = l.getBytes
    println(l1)                      //[B@f44b405
Run Code Online (Sandbox Code Playgroud)

为什么价值观改变了?如何正确转换??

scala protocol-buffers playframework scalapb

0
推荐指数
1
解决办法
1843
查看次数