第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JNA:結(jié)構(gòu)體的字符數(shù)組成員的計算大小令人驚訝

JNA:結(jié)構(gòu)體的字符數(shù)組成員的計算大小令人驚訝

阿波羅的戰(zhàn)車 2023-07-19 10:08:10
有人可以向我解釋為什么下面的結(jié)構(gòu)大小是 16 嗎?public class StringStruct extends Structure {  public char[] data = new char[4];  public StringStruct() {}  @Override  protected List<String> getFieldOrder() {    return Collections.singletonList("data");  }}public class Main {  public static void main(String[] args) {    StringStruct ss = new StringStruct();    // Prints StringStruct: 16    // I was expecting 4...    System.out.println("StringStruct: " + ss.size());  }}我想對擁有數(shù)據(jù)的結(jié)構(gòu)進行建模typedef struct {   char data[4];} StringStruct_s如果我改用字節(jié)數(shù)組,它會返回預(yù)期值。盡管如此,字符數(shù)組的大小還是讓我感到驚訝。該字段是否被解釋為擁有編碼的 String ?因此,我使用各種顯式編碼(-Djna.encoding="...")啟動了這個可執(zhí)行文件,看看它是否有效果。不用找了...
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊

在 中JNA,Java char 可以映射為16-bit32-bit字符。

這意味著您擁有:32/8 * 4 = 16

https://github.com/java-native-access/jna/blob/master/www/Mappings.md

在你的機器上嘗試這樣的事情

int main() {
  printf("%ld\n",sizeof(wchar_t));
}

更新

正如@Daniel 提到的,值得注意的是,C基于映射char應(yīng)該通過byte.

對于這門課

interface CLibrary extends Library {


  public CLibrary.Data.ByVal GetDataValue();

  public CLibrary.Data.ByRef GetDataAllocated();


  public class Data extends Structure {


    public static final List<String> FIELDS =  List.of("array");


    public static class ByVal extends Data implements Structure.ByValue {}


    public static class ByRef extends Data implements Structure.ByReference {}


    public byte[] array = new byte[4];


    @Override

    protected List<String> getFieldOrder() {

      return FIELDS;

    }

  }

}

您將獲得預(yù)期的大小:4


查看完整回答
反對 回復(fù) 2023-07-19
  • 1 回答
  • 0 關(guān)注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號